針對某個可以列舉完全的可能性字段,我們應該如何儲存
只要某個欄位的可能性是可以列舉完全的,那麼一般情況下都會採用choices引數
classuser(models.model):
username = models.charfield(max_length=32)
age =models.integerfield()
#性別gender_choices =(
(1,'男'
), (2,'女'
), (3,'其他'
), )
gender = models.integerfield(choices=gender_choices)
score_choices =(
('a','優秀'),
('b','良好'),
('c','及格'),
('d','不合格'),
)#保證字段型別跟列舉出來的元祖第乙個資料型別一致即可
score = models.charfield(choices=score_choices,null=true)
"""該gender欄位存的還是數字 但是如果存的數字在上面元祖列舉的範圍之內
那麼可以非常輕鬆的獲取到數字對應的真正的內容
"""
存
models.user.objects.create(username='jason
',age=18,gender=1)
models.user.objects.create(username='
egon
',age=85,gender=2)
models.user.objects.create(username='
tank
',age=40,gender=3)
#存的時候 沒有列舉出來的數字也能存(範圍還是按照字段型別決定)
models.user.objects.create(username='
tony
',age=45,gender=4)
取
user_obj = models.user.objects.filter(pk=1).first()#只要是choices引數的字段 如果你想要獲取對應資訊 固定寫法 get_欄位名_display()
(user_obj.get_gender_display())
user_obj = models.user.objects.filter(pk=4).first()
#如果沒有對應關係 那麼欄位是什麼還是展示什麼
print(user_obj.get_gender_display()) #
4
mtv:django號稱是mtv模型
m:models
t:templates
v:views
mvc:其實django本質也是mvc
m:models
v:views
c:controller
vue框架:mvvm模型
全自動:利用orm自動幫我們建立第三張關係表
classbook(models.model):
name = models.charfield(max_length=32)
authors = models.manytomanyfield(to='
author')
class
author(models.model):
name = models.charfield(max_length=32)
"""優點:**不需要你寫 非常的方便 還支援orm提供操作第三張關係表的方法...
不足之處:第三張關係表的擴充套件性極差(沒有辦法額外新增欄位...)
"""
純手動
classbook(models.model):
name = models.charfield(max_length=32)
class
author(models.model):
name = models.charfield(max_length=32)
class
book2author(models.model):
book_id = models.foreignkey(to='
book')
author_id = models.foreignkey(to='
author')
'''優點:第三張表完全取決於你自己進行額外的擴充套件
不足之處:需要寫的**較多,不能夠再使用orm提供的簡單的方法
不建議你用該方式
'''
半自動
classbook(models.model):
name = models.charfield(max_length=32)
authors = models.manytomanyfield(to='
author',
through='
book2author',
through_fields=('
book
','author')
)class
author(models.model):
name = models.charfield(max_length=32)
#books = models.manytomanyfield(to='book',
#through='book2author',
#through_fields=('author','book')#)
class
book2author(models.model):
book = models.foreignkey(to='
book')
author = models.foreignkey(to='
author')
"""through_fields欄位先後順序
判斷的本質:
通過第三張表查詢對應的表 需要用到哪個欄位就把哪個欄位放前面
你也可以簡化判斷
當前表是誰 就把對應的關聯欄位放前面
半自動:可以使用orm的正反向查詢 但是沒法使用add,set,remove,clear這四個方法
"""
總結:你需要掌握的是全自動和半自動 為了擴充套件性更高 一般我們都會採用半自動(寫**要給自己留一條後路)
非同步提交:區域性重新整理
例子:github註冊,動態獲取使用者名稱實時的跟後端確認並實時展示的前端(區域性重新整理)
朝傳送請求的方式
1.瀏覽器位址列直接輸入url回車 get請求
2.a標籤href屬性 get請求
3.form表單 get請求/post請求
4.ajax get請求/post請求
ajax 不是新的程式語言,而是一種使用現有標準的新方法(比較裝飾器)
小例子
"""頁面上有三個input框
在前兩個框中輸入數字 點選按鈕 朝後端傳送ajax請求
後端計算出結果 再返回給前端動態展示的到第三個input框中
(整個過程頁面不准有重新整理,也不能在前端計算)
"""$(
'#btn
').click(function () ,#}
data:,
// 4.**函式:當後端給你返回結果的時候會自動觸發 args接受後端的返回結果
success:function (args)
console.log(typeof args)}})
})"""針對後端如果是用httpresponse返回的資料 **函式不會自動幫你反序列化
如果後端直接用的是jsonresponse返回的資料 **函式會自動幫你反序列化
httpresponse解決方式
1.自己在前端利用json.parse()
2.在ajax裡面配置乙個引數
(後面再講)
"""
django模板層知識要點
模版是純文字檔案。它可以產生任何基於文字的的格式 html,xml,csv等等 模版包括在使用時會被值替換掉的 變數,和控制模版邏輯的 標籤。下面是乙個小模版,它說明了一些基本的元素。後面的文件中會解釋每個元素。變數看起來就像是這樣 當模版引擎遇到乙個變數,它將計算這個變數,然後用結果替換掉它本身。...
Django 模板層 自定義標籤和過濾器
自定義模板標籤 要在模組內自定義標籤,首先,這個模組必須包含乙個名為register的變數,它是template.library的乙個例項 from django import template register template.library 自定義過濾器就是乙個帶有乙個或兩個引數的python...
django練習 模板層做個簡單的計算器頁面
views層 def cal view request if request.method get 顯示頁面 return render request,cal.html elif reqeust.method post 處理資料 拿x,計算方法,y x request.post.get x 如果使...