1.choices字段2Ajax異步提交即時刷新3contentType先後端編碼格式4刪除彈窗二次確認5自定義分頁器 # 57

day57choices字段2Ajax異步提交即時刷新3contentType先後端編碼格式4刪除彈窗二次確認5自定義分頁器

今日內容
0.今日內容

 1 視頻知識點:
 2 
 3     知識點一 :
 4     02 choices字段.mp4
 5 
 6     知識點二:django框架簡寫
 7     03 MTV與MVC模型.mp4
 8 
 9     知識點三:ajax 是js中的計數 ,可是在js中比較繁瑣 ,爲了提升效率,因此這裏採用jQuery封裝版本的ajax
10     04 ajax基本語法結構.mp4
11 
12     知識點四:contentType先後端傳輸數據編碼格式
13     05 先後端傳輸數據編碼格式.mp4
14         三大分類:1.urlencoded2.formdata 3.json
15         form 表單 能夠修改成formdata傳文件
16         1.符合urlencoded 放到request.POST中供用戶獲取
17         2.若是是文件 只要指定編碼是formdata 就會自動解析放到 request.FILES中
18 
19     知識點五:
20     06 ajax傳文件.mp4
21     默認urlencoded ajax發送json格式數據,不會解析:而是原封不動放在request.body中
22 
23     知識點五:
24     from django.core import serializers
25     # django自帶的小型序列化工具
26     07 序列化組件.mp4
27 
28     知識點六:sweetalert搭建頁面
29     刪除字段記錄時,添加確認操做
30     08 ajax結合sweetalert插件使用.mp4
31 
32     知識點七:自定義分頁器
33     09 自定義分頁器的使用.mp4
34 
35 1.choices字段
36 2.MTV與MVC模型
37 3.Ajax
38 3.contentType先後端傳輸數據編碼格式
39 4.sweetalert
40 5.自定義分頁器
今日內容

 

1.choices字段

 1 1.choices字段  choices參數(做爲參數使用)
 2     用戶性別
 3     用戶學歷
 4     工做狀態
 5     客戶來源
 6     是否結婚
 7     username    gander
 8     jason       1
 9 
10 
11 models.py
12 """
13 from django.db import models
14 
15 # Create your models here.
16 class User(models.Model):
17     username = models.CharField(max_length=32)
18     age = models.IntegerField()
19     choices = (
20         (1,'男'),(2,'女'),(3,'其餘')
21     )
22     # 性別
23     gender = models.IntegerField(choices=choices)
24     """
25     choice 語法介紹:
26         1.存choice 裏面羅列的數字與中文對應關係
27             display 展現
28             print(user_obj.get_gender_display)
29             只要是choices字段 在獲取數字對應的註釋 固定語法 get_choices字段名_display()
30 
31         2.存沒有羅列遲來的數字 即 :不屬於choices字段,沒有對應關係的數字
32             不會報錯 仍是展現數字
33     """
34 
35 class Book(models.Model):
36     title = models.CharField(max_length=32)
37 """
38 
39 tests.py
40 """
41 user_obj = models.User.objects.filter(pk=2).first()
42 print(user_obj)
43 print(user_obj.get_gender_display())  # 男
44 """
45 只要choices字段 在獲取數字對應的註釋
46 固定語法: get_choices字段名_display()
47 """
48 """
choices

 


2.django 的MTV與MVC模型

 1 MTV與MVC模型
 2     django框架 自稱MTV框架
 3         M:models
 4         T:templates
 5         V:views
 6     MVC
 7         M:models
 8         V:views
 9         C:controller 控制器(urls)
10     本質:MTV其實也是MVC
django的MTV與MVC

 


3.Ajax 是原生js 使用的是封裝好的jq 提速

  1 3.Ajax(*********)
  2     優勢:異步提交,局部刷新
  3     請求方式:
  4         get post
  5 
  6         a標籤 href屬性      get請求
  7         瀏覽器窗口輸入url   get請求
  8         form表單            get/post
  9         ajax                get/post
 10     ps:
 11     1.首先ajax這門技術  是js中的
 12     2.可是原生js操做比較繁瑣,
 13     3.咱們這裏爲了提升效率,直接使用jQuery封裝版本的ajax
 14 
 15     ajax最大的優勢是:
 16         在不從新加載整個頁面的狀況下,能夠與服務器交換數據並更新部分網頁內容(這一特色給用戶的感覺是在不知不覺中完成和響應過程)
 17 
 18 例:
 19 頁面上三個input框
 20 在前兩個input框中輸入數字
 21 點擊按鈕 發送ajax請求 不刷新頁面的狀況下
 22 第三個框中自動算出兩數之和
 23 ajax語法(****)
 24 $('#b1').on('click',function () {
 25         {#alert(123)#}
 26         //點擊按鈕 '求和'朝後端發送post請求
 27         //ajax最基礎結構
 28         $.ajax({
 29             //控制發送給誰 不寫就是朝當前地址提交
 30             url:'',
 31             //發送post請求
 32             type:'post',
 33             //發送數據
 34             data:{'i1':$('#i1').val(),'i2':$('#i2').val()},
 35             success:function (data) {
 36                 //data形參用來接收異步提交的結果
 37                 {#alert(data)#}
 38                 {#//將後端計算好的結果 經過DOM操做渲染到第三個input框中#}
 39                 $('#i3').val(data)
 40             }
 41         })
 42     })
 43 
 44 完整案例:
 45 index.html
 46 <!DOCTYPE html>
 47 <html lang="en">
 48 <head>
 49     <meta charset="UTF-8">
 50     <title>index</title>
 51     <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
 52 </head>
 53 <body>
 54 <input type="text" id="i1"> + <input type="text" id="i2"> = <input type="text" id="i3">
 55 <button id="b1">求和</button>
 56 <script>
 57     $('#b1').on('click',function () {
 58         {#alert(123)#}
 59         //點擊按鈕 '求和'朝後端發送post請求
 60         //ajax最基礎結構
 61         $.ajax({
 62             //控制發送給誰 不寫就是朝當前地址提交
 63             url:'',
 64             //發送post請求
 65             type:'post',
 66             //發送數據
 67             data:{'i1':$('#i1').val(),'i2':$('#i2').val()},
 68             success:function (data) {
 69                 //data形參用來接收異步提交的結果
 70                 {#alert(data)#}
 71                 {#//將後端計算好的結果 經過DOM操做渲染到第三個input框中#}
 72                 $('#i3').val(data)
 73             }
 74         })
 75     })
 76 </script>
 77 </body>
 78 </html>
 79 
 80 views.py
 81 from django.shortcuts import render
 82 
 83 # Create your views here.
 84 """
 85 ajax案例
 86 """
 87 from django.shortcuts import HttpResponse
 88 def index(request):
 89 
 90     # 判斷 當前請求是不是ajax請求 get返回True  post 返回False
 91     print(request.is_ajax())
 92     if request.is_ajax():
 93         if request.method == 'POST':
 94             print(request.POST)
 95             # 後端獲取的前端數據都是字符串格式
 96             i1 = request.POST.get('i1')
 97             i2 = request.POST.get('i2')
 98             res = int(i1) + int(i2)
 99             return HttpResponse(res)
100     return render(request,'index.html')
Ajax原生js,使用jq封裝

 


3.ajax原理.png

4..contentType案例對比

  1 1.urlencoded:
  2 完整案例:
  3 index.html
  4 <!DOCTYPE html>
  5 <html lang="en">
  6 <head>
  7     <meta charset="UTF-8">
  8     <title>index</title>
  9     <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
 10 </head>
 11 <body>
 12 <input type="text" id="i1"> + <input type="text" id="i2"> = <input type="text" id="i3">
 13 <button id="b1">求和</button>
 14 <script>
 15     $('#b1').on('click',function () {
 16         {#alert(123)#}
 17         //點擊按鈕 '求和'朝後端發送post請求
 18         //ajax最基礎結構
 19         $.ajax({
 20             //控制發送給誰 不寫就是朝當前地址提交
 21             url:'',
 22             //發送post請求
 23             type:'post',
 24             //發送數據
 25             data:{'i1':$('#i1').val(),'i2':$('#i2').val()},
 26             success:function (data) {
 27                 //data形參用來接收異步提交的結果
 28                 {#alert(data)#}
 29                 {#//將後端計算好的結果 經過DOM操做渲染到第三個input框中#}
 30                 $('#i3').val(data)
 31             }
 32         })
 33     })
 34 </script>
 35 </body>
 36 </html>
 37 
 38 views.py
 39 from django.shortcuts import render
 40 
 41 # Create your views here.
 42 """
 43 ajax案例
 44 """
 45 from django.shortcuts import HttpResponse
 46 def index(request):
 47 
 48     # 判斷 當前請求是不是ajax請求 get返回True  post 返回False
 49     print(request.is_ajax())
 50     if request.is_ajax():
 51         if request.method == 'POST':
 52             print(request.POST)
 53             # 後端獲取的前端數據都是字符串格式
 54             i1 = request.POST.get('i1')
 55             i2 = request.POST.get('i2')
 56             res = int(i1) + int(i2)
 57             return HttpResponse(res)
 58     return render(request,'index.html')
 59 2.formdata
 60 index.html
 61 <!DOCTYPE html>
 62 <html lang="en">
 63 <head>
 64     <meta charset="UTF-8">
 65     <title>index</title>
 66     <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
 67 </head>
 68 <body>
 69 <form action="" method="post" enctype="multipart/form-data">
 70     username:<input type="text" type="text" name="name">
 71     password:<input type="text" name="pwd">
 72     info: <input type="file" name="myfile">
 73     <input type="submit">
 74 </form>
 75 </body>
 76 </html>
 77 
 78 view.py
 79 """
 80 ajax案例
 81 """
 82 from django.shortcuts import HttpResponse
 83 def index(request):
 84     """
 85     切換爲formdata 標識 index.html中採用form表單模式
 86     <form action="" method="post" enctype="multipart/form-data">
 87     """
 88     # 驗證先後端傳輸數據的編碼格式
 89     if request.method == 'POST':
 90         print('request.POST',request.POST)
 91         print('request.FILES',request.FILES)
 92         """
 93         post 即:urlencoded
 94         request.POST <QueryDict: {'name': ['llx'], 'pwd': ['123'], 'myfile': ['《Python Cookbook》第三版中文.pdf']}>
 95         request.FILES <MultiValueDict: {}>
 96         formdata: 即formdata 下 <form action="" method="post" enctype="multipart/form-data">
 97         request.POST <QueryDict: {'name': ['llw'], 'pwd': ['123']}>
 98         request.FILES <MultiValueDict: {'myfile': [<TemporaryUploadedFile: 《Python Cookbook》第三版中文.pdf (application/pdf)>]}>
 99         """
100     return render(request,'index.html')
101 
102 3.json
103 index.html
104 <!DOCTYPE html>
105 <html lang="en">
106 <head>
107     <meta charset="UTF-8">
108     <title>index</title>
109     <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
110 </head>
111 <body>
112 <input type="text" id="i1"> + <input type="text" id="i2"> = <input type="text" id="i3">
113 <button id="b1">求和</button>
114 <script>
115      $('#b1').on('click',function () {
116         {#alert(123)#}
117         //點擊按鈕 '求和'朝後端發送post請求
118         //ajax最基礎結構
119         $.ajax({
120             //控制發送給誰 不寫就是朝當前地址提交
121             url:'',
122             //發送post請求
123             type:'post',
124             //發送json數據
125             data:JSON.stringify({'i1':$('#i1').val(),'i2':$('#i2').val()}),
126             //告訴後端你此次的發送的數據是json格式的
127             contentType:'application/json',
128             success:function (data) {
129                 //data形參用來接收異步提交的結果
130                 {#alert(data)#}
131                 {#//將後端計算好的結果 經過DOM操做渲染到第三個input框中#}
132                 $('#i3').val(data)
133             }
134         })
135     })
136 </script>
137 </body>
138 </html>
139 
140 views.py
141 """
142 ajax案例
143 """
144 from django.shortcuts import HttpResponse
145 def index(request):
146     # 驗證先後端傳輸數據的編碼格式
147     if request.method == 'POST':
148         print('request.POST',request.POST)
149         print('request.FILES',request.FILES)
150         print(request.body)
151         # json
152         """
153         //發送json數據
154             data:JSON.stringify({'i1':$('#i1').val(),'i2':$('#i2').val()}),
155             //告訴後端你此次的發送的數據是json格式的
156             contentType:'application/json',
157         """
158         """
159         request.POST <QueryDict: {}>
160         request.FILES <MultiValueDict: {}>
161 
162         在.request.body中  b'{"i1":"1","i2":"2"}'
163         """
164         # 後端須要本身手動去request.body中獲取json 格式數據 本身處理
165         json_str = request.body
166         import json
167         s = json_str.decode('utf-8')
168         ral_d = json.loads(s)
169         print(ral_d,type(ral_d))
170     return render(request,'index.html')
171 
172     4.ajax 傳文件
173 
174     index.html
175 <!DOCTYPE html>
176 <html lang="en">
177 <head>
178     <meta charset="UTF-8">
179     <title>index</title>
180     <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
181 </head>
182 <body>
183 <button id="b1">求和</button>
184 <input type="file" id="d1">
185 <script>
186 
187     // ajax傳輸文件
188     $('#b1').on('click',function () {
189         //ajax傳輸文件 建議使用內置對象formdata
190         var formData = new FormData();  //便可以穿普通的鍵值對 也能夠傳文件
191         // 添加普通鍵值
192         formData.append('username','jason');
193         formData.append('password','123');
194         // 傳文件
195         // 如何獲取文件標籤所存儲的文件對象?  固定語法
196         // 1.先用jQery查找到存儲文件的input標籤
197         // 2.將jQuery對象轉成原生js對象
198         // 3.利用原生js對象的方法 .files[0]獲取到標籤內部存儲的文件對象
199         formData.append('my_file',$('#d1')[0].files[0]);
200         //ajax最基礎結構
201         $.ajax({
202             //控制發送給誰 不寫就是朝當前地址提交
203             url:'',
204             //發送post請求
205             type:'post',
206             //發送json數據
207             data:formData,
208             // ajax 發送文件須要指定兩個額外的參數
209             processData:false,  //告訴前端不要處理數據
210             contentType:false,  //不適用任何編碼 由於 formdata 對象自身 自帶編碼 ,django後端也可以識別formdata對象
211             success:function (data) {
212                 //data形參用來接收異步提交的結果
213                 {#alert(data)#}
214                 {#//將後端計算好的結果 經過DOM操做渲染到第三個input框中#}
215                 $('#i3').val(data)
216             }
217         })
218     })
219 </script>
220 </body>
221 </html>
222 
223     views.py
224 from django.shortcuts import render
225 
226 # Create your views here.
227 """
228 ajax案例
229 """
230 from django.shortcuts import HttpResponse
231 def index(request):
232         ajax 傳文件
233 
234         request.POST <QueryDict: {'username': ['jason'], 'password': ['123']}>
235         request.FILES <MultiValueDict: {'my_file': [<TemporaryUploadedFile: 《Python Cookbook》第三版中文.pdf (application/pdf)>]}>
236 
237         """
238         return HttpResponse('OK')
239     return render(request,'index.html')
4..contentType案例對比

 


4.contentType先後端傳輸數據編碼格式

 1 4.contentType先後端傳輸數據編碼格式
 2     三類:
 3     1.urlencoded        默認使用的編碼格式是urlencoded    數據格式:name=jason&pwd=123
 4     2.formdata
 5     3.json
 6 
 7 
 8     1.form表單
 9 --urlencoded
10         1.默認使用的編碼格式是urlencoded
11             數據格式:name=jason&pwd=123
12             django 後端針對urlencoded編碼格式的數據會自動解析並放到request.POST中供用戶獲取
13 --formdata
14         2.能夠修改成formdata 傳文件
15             1.django後端針對只要符合urlencoded編碼格式的數據   (name=jason&pwd=123)都會自動解析並放到request.POST中供用戶使用
16             2.若是是文件,只要你指定的編碼是formdata就會自動解析並放到request.FILES中
17         總結:先後端傳輸數據的時候 必定要保證數據格式和你的編碼格式是一致的不能騙人家
18 
19     2.ajax提交數據
20         ajax默認數據提交方式也是urlencoded
21 
22         ajax發送json格式數據
23             django 後端針對json格式的數據 並不會自動解析 放到request.POST或者request.FILES裏面
24             他並不會解析到json 格式數據 而是將它原封不動的放在request.body中了
25     3.ajax 上傳文件
26         傳文件
27         如何獲取文件標籤所存儲的文件對象 ?
28         固定語法:
29             1.先用jQuery查找到存儲文件的input標籤
30             2.將jQuery對象轉成原生js對象
31             3.利用原生js對象方法 .file[0] 獲取到標籤內部存儲的文件對象
32             4.必定要指定兩個參數爲false
4.contentType先後端傳輸數據編碼格式

 


re

 1     
 2     序列化組件
 3                 
 4         from django.core import serializers  # django自帶的一個小型的序列化工具
 5         def reg(request):
 6             user_list = models.User.objects.all()
 7             res = serializers.serialize('json',user_list)
 8             return render(request,'index.html',locals())
 9         
10         [{
11                 "model": "app01.user",
12                 "pk": 1,
13                 "fields": {
14                     "username": "jason",
15                     "age": 18,
16                     "gender": 1
17                 }
18             }, {
19                 "model": "app01.user",
20                 "pk": 2,
21                 "fields": {
22                     "username": "tank",
23                     "age": 24,
24                     "gender": 3
25                 }
26             }, {
27                 "model": "app01.user",
28                 "pk": 3,
29                 "fields": {
30                     "username": "egon",
31                     "age": 73,
32                     "gender": 2
33                 }
34             }, {
35                 "model": "app01.user",
36                 "pk": 7,
37                 "fields": {
38                     "username": "kevin",
39                     "age": 29,
40                     "gender": 4
41                 }
42         }]
43         
44     
45     
46     sweetalert搭建頁面
47     
48     自定義分頁器
49         1 bulk_create()  批量插入數據
50             # for i in range(1000):
51             #     models.Book.objects.create(title='第%s本書'%i)
52             # 上面這種方式 效率極低
53             
54             l = []
55             for i in range(10000):
56                 l.append(models.Book(title='第%s本書'%i))
57             models.Book.objects.bulk_create(l)  # 批量插入數據
58     
59     
60     自定義分頁器的使用
61         後端代碼
62                 book_list = models.Book.objects.all()
63                 current_page = request.GET.get("page",1)
64                 all_count = book_list.count()
65                 page_obj = Pagination(current_page=current_page,all_count=all_count,per_page_num=10,pager_count=5)
66                 page_queryset = book_list[page_obj.start:page_obj.end]
67         前端代碼
68                 {% for book in page_queryset %}
69                 <p>{{ book.title }}</p>
70                 {% endfor %}
71                 {{ page_obj.page_html|safe }}
72 
73     多對多表關係 三種建立方式
re
相關文章
相關標籤/搜索