日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

巨蟒python全栈开发-第11阶段 ansible_project2

發布時間:2024/4/17 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 巨蟒python全栈开发-第11阶段 ansible_project2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一個NB的網站:

https://www.toolfk.com/

CDN:將用戶的需求送到最近的節點:內容分發網絡

有些是專門做CDN的工具

常用的markdown是需要知道的,短信有字數限制.

websocket:客戶端與服務器,http是客戶端向服務端發消息,服務端是找不到客戶端的,怎么辦?

  websocket是服務端也可以發消息發送給客戶端,例如:網易的聊天室

短網站:

大綱內容:

1.表模型介紹

2.表結構介紹

3.前端ui插件介紹

4.用戶列表

?

1.表模型介紹

?domain是域名

?? ?

2.表結構介紹

?

?

寫在model里邊的文件?數據庫創建

from django.db import models from django.contrib.auth.models import User, Group from django.contrib.auth.models import AbstractUser# Create your models here. status = (("0", "等待更新"),("1", "更新中"),("2", "等待測試"),("3", "測試通過"),("4", "更新完成"),("5", "更新失敗"),("6", "回滾成功"),("7", "回滾失敗") )class Project(models.Model):"""項目表"""Language = (("0", 'python'),("1", "java"),("2", 'go'),("3", "php"),("4", "html"))name = models.CharField(verbose_name='項目名', max_length=200, unique=True)boss = models.ManyToManyField('UserProfile', verbose_name='責任人', related_name="boss")dev_user = models.ManyToManyField('UserProfile', verbose_name="研發人員", related_name="dev_user")test_user = models.ManyToManyField('UserProfile', verbose_name="測試人員", related_name="test_user")ops_user = models.ManyToManyField('UserProfile', verbose_name="運維人員", related_name="ops_user")path = models.CharField(verbose_name='項目目錄', max_length=200)git_path = models.CharField(verbose_name='git地址', max_length=200)nginx_host = models.ManyToManyField('Host', verbose_name='nginx機器', related_name="nginxhost")nginx_conf = models.CharField(verbose_name='nginx配置文件', max_length=200, null=True, blank=True)server_host = models.ManyToManyField('Host', verbose_name='后端主機', related_name="host")language = models.CharField(verbose_name='語言', choices=Language, default="0", max_length=20)domain = models.CharField(verbose_name='域名', null=True, blank=True, max_length=100)note = models.CharField(verbose_name='備注信息', max_length=218, null=True, blank=True)create_time = models.DateTimeField("創建時間", auto_now_add=True)status = models.CharField(verbose_name="狀態", choices=(("0", "可用"), ("1", "下線")), default="0", max_length=2)class Meta:ordering = ("-create_time",) #???def __str__(self):return self.nameclass Host(models.Model):env = (("0", '開發'),("1", "測試"),("2", "預生產"),("3", "生產"))Type = (("0", "nginx"),("1", "redis"),("2", "db"),("3", "server"),)status = (("0", "在線"),("1", "下線"),("2", "維修"),)name = models.CharField(verbose_name="主機名", max_length=200, unique=True)hostip = models.GenericIPAddressField(verbose_name='主機ip地址')env = models.CharField(verbose_name='環境', choices=env, default="3", max_length=20)version = models.CharField(verbose_name="系統版本", max_length=50, null=True, blank=True)type = models.CharField(verbose_name="類型", choices=Type, default="3", max_length=20)ssh_port = models.CharField(verbose_name="ssh端口", default=22, max_length=10)status = models.CharField(verbose_name="狀態", choices=status, default="0", max_length=2)def __str__(self):return self.hostipclass Issue(models.Model):"""# 更新表"""project = models.ForeignKey(Project, verbose_name='發布項目')user = models.ForeignKey("UserProfile", verbose_name='發布人')create_time = models.DateTimeField("創建時間", auto_now_add=True)type = models.CharField(verbose_name='更新類型', choices=(("0", "文件"), ("1", "git")), default="0", max_length=20, )status = models.CharField(verbose_name='更新狀態', choices=status, default="0", max_length=20)version = models.CharField(verbose_name="版本", null=True, blank=True, max_length=100)backup = models.CharField(verbose_name='備份狀態', choices=(("0", ""), ("1", "")), default="0", max_length=20)backup_path = models.CharField(verbose_name='備份文件路徑', max_length=2048, null=True, blank=True)upload_path = models.CharField(verbose_name='上傳文件路徑', max_length=2048, null=True, blank=True)class Meta:ordering = ['-create_time']class Host_Issue(models.Model):"""# 主機的更新信息表"""project = models.ForeignKey(Project, verbose_name='發布項目')host = models.ForeignKey(Host, verbose_name='發布機器')issue = models.ForeignKey(Issue, verbose_name='更新')status = models.CharField(verbose_name='更新狀態', choices=status, default="0", max_length=20)class Command(models.Model):"""命令表"""command = models.CharField(verbose_name="命令", max_length=200)result = models.CharField(verbose_name="結果", max_length=2000)hosts_list = models.CharField(verbose_name="執行機器", max_length=20000)user = models.ForeignKey('UserProfile', verbose_name='用戶')create_time = models.DateTimeField("創建時間", auto_now_add=True)class Meta:ordering = ['-create_time']class UserProfile(models.Model):"""用戶表"""name = models.CharField(verbose_name="用戶名稱", max_length=200)email = models.CharField(verbose_name="郵箱地址", max_length=200)password = models.CharField(verbose_name="密碼", max_length=200)role = models.CharField(verbose_name='角色', choices=(("0", "開發"), ("1", "測試"), ("2", '運維')), default="0",max_length=10)is_admin = models.CharField(verbose_name='管理員', choices=(("0", "Admin"), ("1", "普通")), default="1",max_length=10)is_unable = models.CharField(verbose_name='是否可用', choices=(("0", "可用"), ("1", "不可用")), default="0",max_length=10)department = models.CharField(verbose_name='部門', blank=True, null=True, max_length=10)phone = models.CharField(verbose_name='手機號', blank=True, null=True, max_length=11)create_time = models.DateTimeField("創建時間", auto_now_add=True)class Meta:ordering = ['-create_time']def __str__(self):return self.nameclass Cron(models.Model):"""計劃任務"""name = models.CharField(verbose_name="計劃名稱", unique=True, max_length=64)hosts_list = models.ManyToManyField(Host, verbose_name="執行機器")user = models.CharField(verbose_name="執行用戶", null=True, blank=True, default='root', max_length=256)job = models.CharField(verbose_name="計劃", max_length=1024)time = models.CharField(verbose_name="計劃任務執行的時間", max_length=64)create_time = models.DateTimeField("創建時間", auto_now_add=True)create_user = models.ForeignKey(UserProfile, verbose_name="創建者")note = models.CharField(verbose_name="計劃描述", null=True, blank=True, max_length=256)class Meta:ordering = ['-create_time']def __str__(self):return self.nameclass Init(models.Model):"""初始化表"""name = models.CharField(verbose_name="名稱", unique=True, max_length=64)function = models.CharField(verbose_name="初始化功能", unique=True, max_length=64)play_book = models.CharField(verbose_name="playbook路徑", max_length=100)create_time = models.DateTimeField("創建時間", auto_now_add=True)create_user = models.ForeignKey(UserProfile, verbose_name="創建者")class Meta:ordering = ('-create_time',)def __str__(self):return self.nameclass InitLog(models.Model):"""初始化日志表"""init = models.ForeignKey(Init, verbose_name="初始化功能")hosts_list = models.ManyToManyField(Host, verbose_name="執行機器")user = models.ForeignKey(UserProfile, verbose_name="創建者")create_time = models.DateTimeField("創建時間", auto_now_add=True)result=models.CharField(verbose_name="結果",max_length=1000,null=True,blank=True)class Meta:ordering = ('-create_time',) View Code

首先是,下圖中的狀態,

上圖中的"可用",是針對項目而言的.

在多個字段對應同一張表中的用戶

?related_name代表別名.反向查詢的作用

Meta用來定義表中的一些規則.

在數據庫中倒序還是拿出來倒序?

str代表什么?顯示object,寫上就顯示對應的return的值.

?

?

GenericIPAddressField字段表示什么?代表IPV4的地址和IPV4的地址
version表示版本
unique表示唯一
ssh_port默認是22

?

是否備份的狀態,

?

?

?

?

?

?

3.前端ui插件介紹

?兩點:

所有項目添加和修改都需要,模態框modelform來做

ajax發送請求.

將原來的靜態文件static單獨拿出來,放在

js文件:

直接從"網絡操作開始看",

?

?

看一下ui.msg的位置,跳轉到下圖的位置

點擊113行的success,走到,上圖289的success.

?this代表執行自己的_showMsg方法,級別是success.

?

_showMsg也執行了一個函數.

swith代表循環

sco.js文件

上邊顯示的是兩種效果.

如果不執行,就會調用回調函數.

?

?

在1000ms之后執行這個事件.

#刷新當前的界面

?

?

點擊進入go

?

上圖是跳轉到百度首頁

以上這個方法是直接關閉.

boxClose默認值是false.

如果圖標icon不為空,就需要remove掉

?上邊是case為0,下面case為1,處理

如果是401和403,那么就沒有權限.

?

上邊是請求失敗,404找不到頁面,500是服務器錯誤.

$.ajax就是純正的發送ajax請求.

下邊的ajaxForm不用.

go和to的區別:go多了一個setup的時間,需要等待1000ms

?

confirm這個函數

?

在確認對話框中找到上邊的內容,下圖是傳遞的參數

下面是傳遞的方法.

?

上圖是ui.common.js的位置

?

?content顯示的是內容.

box定義的信息.

?

?

?

?

?

直接return掉了.

jbox的小插件.

重新定義一個模態框.

在github上邊點擊一下紅色位置

上圖是設置的寬高和ajax請求.

?點擊按鈕從sending=>AJAX得到請求

?

?

?

結束之后,設置的內容.

?

上邊是定義關閉的類型,下面開始寫一下.

上圖是原來的樣式,下面我們做一下修改.

添加一個主頁:

?

?

在上邊寫一個div偽裝成一個按鈕.

btn代表按鈕? ?btn-success代表顏色,create_btn代表重新命名.btn-sm表示制作一個小按鈕.

class可以重復,但是id不可以重復.

導入靜態文件.我們就可以使用靜態文件中的box方法了.

?

?

這個時候,我們就有了"創建",這個按鈕了.

這個時候,點擊應該出來模態框,但是遲遲沒有出來???

?修改一下js.html文件和css.html文件

js.html文件:

{% load static %} <!-- jQuery 3 --> <script src="{% static 'plugins/jquery/jquery.min.js' %}"></script> <!-- jQuery UI 1.11.4 --> <script src="{% static 'plugins/jquery-ui/jquery-ui.min.js' %}"></script> <!-- Resolve conflict in jQuery UI tooltip with Bootstrap tooltip --> <script>$.widget.bridge('uibutton', $.ui.button); </script> <!-- Bootstrap 3.3.7 --> <script src="{% static 'plugins/bootstrap/js/bootstrap.min.js' %}"></script> <!--img--> <script src="{% static 'plugins/raphael/raphael.min.js' %}"></script> <!-- Sparkline --> <script src="{% static 'plugins/jquery-sparkline/jquery.sparkline.min.js' %}"></script> <!-- jQuery Knob Chart --> <script src="{% static 'plugins/jquery-knob/jquery.knob.min.js' %}"></script> <!-- daterangepicker --> <script src="{% static 'plugins/moment/min/moment.min.js' %}"></script> <script src="{% static 'plugins/bootstrap-daterangepicker/daterangepicker.js' %}"></script> <!-- datepicker --> <script src="{% static 'plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js' %}"></script> <!-- FastClick --> <script src="{% static 'plugins/fastclick/fastclick.js' %}"></script> <!-- AdminLTE App --> <script src="{% static 'AdminLTE/js/adminlte.min.js' %}"></script> <!--使用新的模態框--> <script type="text/javascript" src="{% static 'plugins/jBox/jBox.min.js'%}"></script> <script src="{% static 'plugins/bootstrap-scojs/js/sco.modal.js' %}"></script> <script src="{% static 'plugins/bootstrap-scojs/js/sco.confirm.js' %}"></script> <script src="{% static 'plugins/bootstrap-scojs/js/sco.message.js' %}"></script> <!--cookie--> <script src="{% static 'plugins/jquery-cookie/jquery-cookie.js' %}"></script> <!--多選--> <script src="/static/plugins/select2/js/select2.min.js"></script><!-- AdminLTE dashboard demo (This is only for demo purposes) 用來修改瀏覽器延時--> <script src="{% static 'plugins/fastclick/fastclick.js' %}"></script><script src="{% static 'AdminLTE/js/pages/dashboard.js' %}"></script> <script src="{% static 'js/common/ui.common.js' %}"></script> <!-- AdminLTE for demo purposes --> <script src="{% static 'AdminLTE/js/demo.js' %}"></script> <!--消息提醒,消息會在一段時間后自動消失,不需要單擊"確定"按鈕--> <script src="{% static 'plugins/jquery-growl/jquery.grow.js' %}"></script><!-- 上傳文件 --> <script src="{% static 'plugins/kartik-v-bootstrap-fileinput/js/fileinput.js' %}"></script> <!-- highlight.js --> View Code

css.html文件

{% load static %} <!-- Bootstrap 3.3.7 --> <link rel="stylesheet" href="{% static 'plugins/bootstrap/css/bootstrap.min.css' %}"> <!-- Font Awesome --> <link rel="stylesheet" href="{% static 'plugins/font-awesome/css/font-awesome.min.css' %}"> <!-- Ionicons --> <link rel="stylesheet" href="{% static 'plugins/Ionicons/css/ionicons.min.css' %}"> <!-- Theme style --> <link rel="stylesheet" href="{% static 'AdminLTE/css/AdminLTE.min.css' %}"> <!-- AdminLTE Skins. Choose a skin from the css/skinsfolder instead of downloading all of them to reduce the load. --> <link rel="stylesheet" href="{% static 'AdminLTE/css/skins/_all-skins.min.css' %}"> <link rel="stylesheet" href="{% static 'plugins/jBox/jBox.css' %}"> <link rel="stylesheet" href="{% static 'plugins/jBox/themes/TooltipDark.css' %}"> <link rel="stylesheet" href="{% static 'plugins/bootstrap-scojs/css/scojs.css' %}"> <link rel="stylesheet" href="{% static 'plugins/bootstrap-scojs/css/sco.message.css' %}"> <!-- Date Picker --> <link rel="stylesheet" href="{% static 'plugins/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css' %}"> <!-- Daterange picker --> <link rel="stylesheet" href="{% static 'plugins/bootstrap-daterangepicker/daterangepicker.css' %}"><link rel="stylesheet" href="{% static 'plugins/select2/css/select2.min.css' %}"><link rel="stylesheet" href="{% static 'plugins/kartik-v-bootstrap-fileinput/css/fileinput.css' %}"> <link rel="stylesheet" href="{% static 'css/main.css' %}"> View Code

點擊按鈕:

?

彈出下面的窗體.

?

?

?

我們得到上邊的三種觸發點擊方式.

?draggable設置成title則可以拖動彈出的窗體.

ajax指代的就是下面的ajaxOptions的值.

源碼中的ajax也就是默認請求的.

在上圖中的Options中選擇,

找到上圖中的這個位置.integer代表可以填寫的參數

Animation

?footer原來默認是true,我們修改成false.

true的情況下,會出現下面右下角的腳標,因此設置成false就可以了

?

?

checkall代表全選,這個不用.

?

?

思考可不可以按照上圖這樣寫?

remote目的就是彈出home2.下面,我們再添加一個別名home2.

?

刷新上圖界面,

點擊創建,得到上邊的彈框"da".

?

下面,我們繼續寫視圖函數.

?

?

點擊"創建",

點擊"創建home2",顯示沒有權限,也就是403錯誤

后端也沒有獲取到相應的值.

我們需要將settings.py里邊的這個csrf注釋掉

?

?

這個時候,我們再次點擊,得到"請求發送失敗".

思考,是誰調用的這個?"請求發送失敗"

ctrl鍵可以找到上邊的內容?

但是服務端已經拿到數據了,這是怎么回事?

?

?

原因:服務器期待返回的是json數據類型.但是現在返回的是HttpResponse,因此存在問題.

導入上圖這個模塊.

這個時候,我們再重新啟動,

刷新上邊的界面,點擊創建,再次嘗試

這個時候,成功了.但是頁面沒有關閉,怎么處理呢?重新跳轉到home頁面

這個時候,我們再次啟動,得到下面的結果:

?這樣點擊home2中的創建就可以重新跳轉回這個home頁面了

上邊js文件中的icon的作用是什么呢?

上圖是我們需要獲取的位置.

?

?

上邊的home2頁面中的小圖標就會轉動5s,才會跳轉到home頁面

上圖中的btn在點擊"創建home2"的時候,處于不可點擊的狀態,

因此,上圖中的icon可以直接寫死,

?

將原來的默認為null修改成$(".wait"),

注意,這個views.py還需要登錄視圖

get和post差不多,但是區別在于get很少用data

我們將上圖中的btn修改成上圖的默認值.

reload和go以及callback都是沒有默認值的.

url代表url的地址.

上圖是我們通過ui.box打開這個界面home2

?

4.用戶列表?

?

下面從簡單的標簽到form表單.

?

前端的列表用到的simple.html

前端的界面用上圖中的樣式就行.

將上邊的simple.html放在項目中

?

創建一個userlist.html

?Responsive Hover Table搜索這個詞組

這個時候,我們只需要將這個div模塊放在div里邊就可以了.

這個時候,我們需要返回userlist.html文件

這個時候的彈出就會是上圖的樣子.

這個時候,上圖就是我們得到的結果

這個時候,我們需要繼承這個模板在上邊的內容.

?

運行:得到下圖的內容

?

?

按鈕不太好看,將button換成div

?

?

注意,添加頁面里邊一定不要寫submit.原因是submit走的是form.

?

運行,得到上邊的界面

?

?

1.想辦法將上圖的兩個位置變成用戶列表

2.分頁盡量用后端的,前端不能承受太大的壓力.

?

回顧:

1.django

2.crm

3.分頁

4.登錄注冊

5.增刪改查

?

轉載于:https://www.cnblogs.com/studybrother/p/10845301.html

總結

以上是生活随笔為你收集整理的巨蟒python全栈开发-第11阶段 ansible_project2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。