choice參數
用戶性別
用戶學歷
用戶工做狀態
客戶來源
...html
choices = ( (1,'male'), (2,'female'), (3,'others') ) gender = models.IntegerField(choices=choices) """ 1.若是我存的是上面元組中數字會怎麼樣 2.若是我存的數字不在元組範圍內又會怎樣 1.數字沒有對應關係 是能夠存的 """
from app01 import models user_obj = models.Userinfo.objects.filter(pk=4).first() print(user_obj.username) print(user_obj.gender) # 針對choices字段 若是你想要獲取數字所對應的中文 你不能直接點字段 # 固定句式 數據對象.get_字段名_display() 當沒有對應關係的時候 該句式獲取到的仍是數字 print(user_obj.get_gender_display())
實例1前端
record_choices = (('checked', "已簽到"), ('vacate', "請假"), ('late', "遲到"), ('noshow', "缺勤"), ('leave_early', "早退"), ) record = models.CharField("上課紀錄", choices=record_choices, default="checked",
實例1python
score_choices = ((100, 'A+'), (90, 'A'), (85, 'B+'), (80, 'B'), (70, 'B-'), (60, 'C+'), (50, 'C'), (40, 'C-'), (0, ' D'), (-1, 'N/A'), (-100, 'COPY'), (-1000, 'FAIL'), ) score = models.IntegerField("本節成績", choices=score_choices, default=-1)
django號稱是MTV框架,其實他仍是MVC框架
MTV:
M:models ,模型,就是數據模型,負責數據的存取;
T: templates ,模板,負責頁面的展現邏輯;
V: views ,視圖函數,負責業務邏輯的處理;
MVC:
M:models, 模型,就是數據模型,負責數據的存取;
V: views, 視圖,負責頁面的展現邏輯;
C: contronner(路由匹配), 控制器,負責業務邏輯的處理;jquery
注: 核心目的就是爲了解耦,提升開發效率ajax
AJAX(Asynchronous Javascript And XML)翻譯成中文就是「異步的Javascript和XML」。即便用Javascript語言與服務器進行異步交互,傳輸的數據爲XML(固然,傳輸的數據不僅是XML)。(我的經驗Asyn開頭,基本都是異步相關)django
AJAX 不是新的編程語言,而是一種使用現有標準的新方法。編程
AJAX 最大的優勢是在不從新加載整個頁面的狀況下,能夠與服務器交換數據並更新部分網頁內容。(這一特色給用戶的感覺是在不知不覺中完成請求和響應過程)json
AJAX 不須要任何瀏覽器插件,但須要用戶容許JavaScript在瀏覽器上執行。後端
同步:提交任務以後 原地等待任務的返回結果 期間不幹任何事兒
異步:提交任務以後 不肯地等待 直接執行下一行代碼 任務的返回經過回調機制瀏覽器
程序運行的三狀態圖
一個頁面 不是總體刷新 而是頁面的某個地方局部刷新
Ajax是一門js的技術,基於原生js開發實現的,可是原生的js寫代碼過於繁瑣
只學習如何使用jQuery實現ajax
JSON 具備自我描述性,更易理解
JSON 使用 JavaScript 語法來描述數據對象,可是 JSON 仍然獨立於語言和平臺。JSON 解析器和 JSON 庫支持許多不一樣的編程語言。
合格的json對象(json只認雙引的字符串格式):
["one", "two", "three"] { "one": 1, "two": 2, "three": 3 } {"names": ["張三", "李四"] } [ { "name": "張三"}, {"name": "李四"} ]
不合格的json對象:
{ name: "張三", 'age': 32 } // 屬性名必須使用雙引號 [32, 64, 128, 0xFFF] // 不能使用十六進制值 { "name": "張三", "age": undefined } // 不能使用undefined { "name": "張三", "birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'), "getName": function() {return this.name;} // 不能使用函數和日期對象 }
實例:
1.展現一個前端頁面 頁面上有三個輸入框 前兩個框輸入數字 點擊按鈕朝後端發請求
頁面不刷新的狀況下 完成數字的加法運算
<input type="text" id="t1"> + <input type="text" id="t2"> = <input type="text" id="t3"> <p> <button id="b1">計算</button> </p> $('#b1').on('click',function () { // 朝後端提交post數據 $.ajax({ // 1.到底朝後端哪一個地址發數據 url:'', // 專門用來控制朝後端提交數據的地址 不寫默認就是朝當前地址提交 // 2.到底發送什麼請求 type:'post', // 專門制定ajax發送的請求方式 // 3.發送的數據究竟是什麼 data:{'t1':$('#t1').val(),'t2':$('#t2').val()}, // 4.異步提交的任務 須要經過回調函數來處理 success:function (data) { // data形參指代的就是異步提交的返回結果 // 經過DOM操做將內容 渲染到標籤內容上 $('#t3').val(data) } }) })
from django.shortcuts import render,HttpResponse def index(request): print(request.is_ajax()) # 判斷當前請求是不是ajax請求 if request.is_ajax(): if request.method == 'POST': # print(request.POST) t1 = request.POST.get('t1') t2 = request.POST.get('t2') res = int(t1) + int(t2) return HttpResponse(res)
contentType先後端傳輸數據編碼格式
form表單 默認的提交數據的編碼格式是urlencoded urlencoded username=admin&password=123這種就是符合urlencoded數據格式 django後端針對username=admin&password=123的urlencoded數據格式會自動解析 將結果打包給request.POST 用戶只須要從request.POST便可獲取對應信息 formdata django後端針對formdata格式類型數據 也會自動解析可是不會方法request.POST中而是給你放到了request.FILES中 ajax ajax默認的提交數據的編碼格式也是urlencoded username=jason&password=123
總結:django後端針對不一樣的編碼格式數據 會有不一樣的處理機制以及不一樣的獲取該數據的方法
先後端在作數據交互的時候 必定必定要代表你所發的的數據究竟是什麼格式
前段後交互 你不能騙人家
你的數據時什麼格式 你就應該準確無誤告訴別人是什麼格式
django後端針對json格式的數據 不會自動幫你解析 會直接原封不動的給你放到request.body中
你能夠手動處理 獲取數據
json_bytes = request.body
json_str = str(json_bytes,encoding='utf-8')
json_dict = json.loads(json_str)
注意點
1. 指定contentType參數
contentType:'application/json',
2. 要將你發送的數據 確保是json格式的
data:JSON.stringify({'username':'jason','password':'123'})
<form action="" method="post" enctype=""> # application/x-www-form-urlencoded 發普通鍵值, multipart/form-data 發文件,向普通兼容,反之不行。 <input type="text" name="username"> <input type="password" name="password"> <input type="file" name="myfile"> <input type="submit"> </form>
須要利用內置對象 Formdata 該對象既能夠傳普通的鍵值 也能夠傳文件 # 獲取input獲取用戶上傳文件的文件的內容 // 1.先經過jquery查找到該標籤 // 2.將jquery對象轉換成原生的js對象 // 3.利用原生js對象的方法 直接獲取文件內容 $('#t3')[0].files[0]
$('#b1').click(function () {
// 1.先生成一個formdata對象
var myFormData = new FormData();
// 2.朝對象中添加普通的鍵值
myFormData.append('username',$("#t1").val());
myFormData.append('password',$("#t2").val());
// 3.朝對象中添加文件數據
// 1.先經過jquery查找到該標籤
// 2.將jquery對象轉換成原生的js對象
// 3.利用原生js對象的方法 直接獲取文件內容
myFormData.append('myfile',$('#t3')[0].files[0]);
$.ajax({
url:'',
type:'post',
data:myFormData, // 直接丟對象
// ajax傳文件 必定要指定兩個關鍵性的參數 contentType:false, // 不用任何編碼 由於formdata對象自帶編碼 django可以識別該對象 processData:false, // 告訴瀏覽器不要處理個人數據 直接發就行 success:function (data) { alert(data) } }) })
「」「
ajax傳文件須要注意的事項
1.利用formdata對象 可以簡單的快速傳輸數據 (普通鍵值 + 文件)
2.有幾個參數
data:formdata對象
contentType:false
processData:false
」「」
自動把數據序列化
1.將用戶表的數據 查詢出來 返回給前端 給前端的是一個大字典 字典裏面的數據的一個個的字段 from django.core import serializers def ser(request): user_queryset = models.Userinfo.objects.all() # [{},{},{},{}] # user_list = [] # for user_obj in user_queryset: # user_list.append({ # 'username':user_obj.username, # 'password':user_obj.password, # 'gender':user_obj.get_gender_display(), # }) res = serializers.serialize('json',user_queryset) print(res) return render(request,'ser.html',locals())
ajax + sweetalert $("#b55").click(function () { swal({ title: "你肯定要刪除嗎?", text: "刪除可就找不回來了哦!", type: "warning", showCancelButton: true, // 是否顯示取消按鈕 confirmButtonClass: "btn-danger", // 確認按鈕的樣式類 confirmButtonText: "刪除", // 確認按鈕文本 cancelButtonText: "取消", // 取消按鈕文本 closeOnConfirm: false, // 點擊確認按鈕不關閉彈框 showLoaderOnConfirm: true // 顯示正在刪除的動畫效果 }, function () { var deleteId = 2; $.ajax({ url: "/delete_book/", type: "post", data: {"id": deleteId}, success: function (data) { if (data.code === 0) { swal("刪除成功!", "你能夠準備跑路了!", "success"); } else { swal("刪除失敗", "你能夠再嘗試一下!", "error") } } }) }); })