今日重點(diǎn)
CBV(class base views) ModelForm 權(quán)限-rbac-(role-based access control) admin組件
課堂筆記
1 CBV 看源碼 url("login",views.LoginView.as_view()) views.LoginView.as_view()=view 一旦用戶訪問(wèn)login: view(request)===dispatch(request)====self.get(request) 2 ModelForm: forms組件: class BookForm(forms.Form): title=forms.CharField() price=forms.DecimalField() publishDate=forms.DateField() #state=forms.ChoiceField(choices=[(1,"已出版"),(2,"未出版")]) publish=forms.ModelChoiceField(queryset=Publish.objects.all()) authors=forms.ModelMultipleChoiceField(queryset=Author.objects.all()) modelForm: model: class Book(models.Model): title = models.CharField( max_length=32) publishDate=models.DateField() price=models.DecimalField(max_digits=5,decimal_places=2) # 與Publish建立一對(duì)多的關(guān)系,外鍵字段建立在多的一方 publish=models.ForeignKey(to="Publish",to_field="nid",on_delete=models.CASCADE) # 與Author表建立多對(duì)多的關(guān)系,ManyToManyField可以建在兩個(gè)模型中的任意一個(gè),自動(dòng)創(chuàng)建第三張表 authors=models.ManyToManyField(to='Author',) #################################### from django.forms import ModelForm class BookModelForm(ModelForm): class Meta: model=Book fields="__all__" #################################### class BookForm(forms.Form): title=forms.CharField() price=forms.DecimalField() publishDate=forms.DateField() #state=forms.ChoiceField(choices=[(1,"已出版"),(2,"未出版")]) publish=forms.ModelChoiceField(queryset=Publish.objects.all()) authors=forms.ModelMultipleChoiceField(queryset=Author.objects.all()) #################################### addBook: def addbook(): if get請(qǐng)求: form=BookModelForm() return render(request,"addbook.html",locals()) # 標(biāo)簽渲染 {{form.as_p}} if post請(qǐng)求: form=BookModelForm(request.POST) if form.is_valid(): form.save() # create操作 editBook: def editbook(): if get請(qǐng)求: editbook=Book.objects.get(pk=id) form=BookModelForm(instance=editbook) return render(request,"addbook.html",locals()) # 標(biāo)簽渲染 {{form.as_p}} if post請(qǐng)求: editbook=Book.objects.get(pk=id) form=BookModelForm(request.POST,instance=editbook) if form.is_valid(): form.save() # update操作 CRM: 1 權(quán)限 什么是權(quán)限? 一個(gè)包含正則表達(dá)式的url就是權(quán)限 who what how wenzhou 訂單表 查看 版本一: UserInfo id name age 1 alex1 33 2 alex2 33 3 alex3 33 4 alex4 33 5 alex5 33 6 alex6 33 7 alex7 33 8 alex8 33 9 alex9 33 10 alex10 33 permission id title url 1 查看訂單 /orders/ 2 添加訂單 /orders/add/ 3 查看客戶 /customers/ 4 添加客戶 /customers/add UserInfo-permission id userinfo_id permission_id 1 1 1 2 1 2 3 1 3 4 1 4 版本二: 模型:rbac(role-based access control) UserInfo id name age 1 alex1 33 2 alex2 33 3 alex3 33 4 alex4 33 5 alex5 33 6 alex6 33 7 alex7 33 8 alex8 33 9 alex9 33 10 alex10 33 role id name 1 管理員 2 CEO 3 銷(xiāo)售 4 講師 UserInfo-role id userinfo_id role_id 1 1 3 1 2 3 1 3 3 1 4 3 1 5 3 permission id title url 1 查看訂單 /orders/ 2 添加訂單 /orders/add/ 3 查看客戶 /customers/ 4 添加客戶 /customers/add 5 編輯客戶 /customers/(\d+)/change permission-Role id role_id permission_id 1 3 1 2 3 2 3 3 3 4 3 4 權(quán)限: login: 注冊(cè)session(查詢) 中間件: # 白名單校驗(yàn)(正則) # 登錄校驗(yàn) # 權(quán)限校驗(yàn) 2 admin組件 Django后臺(tái)數(shù)據(jù)庫(kù)管理工具(web頁(yè)面) 目的: 1 使用組件 2 看源碼 3 自己獨(dú)立開(kāi)發(fā)一個(gè)類(lèi)似組件 1 使用組件admin 一旦注冊(cè)Book: url: 查看書(shū)籍: http://127.0.0.1:8007/admin/app01/book/ 添加書(shū)籍 http://127.0.0.1:8007/admin/app01/book/add/ 編輯書(shū)籍: http://127.0.0.1:8007/admin/app01/book/1/change/ 刪除書(shū)籍: http://127.0.0.1:8007/admin/app01/book/1/delete/ 今日作業(yè): 1 權(quán)限的菜單欄 2 單例模式 https://www.rzrgm.cn/yuanchenqi/articles/8323452.html https://www.rzrgm.cn/yuanchenqi/articles/8715364.html 3 crm ---客戶表管理 ---學(xué)生以及學(xué)習(xí)記錄的管理
CBV
FBV(function base views) 就是在視圖里使用函數(shù)處理請(qǐng)求。
CBV(class base views) 就是在視圖里使用類(lèi)處理請(qǐng)求。
cbv-->restful風(fēng)格接口-->restframework
Python的pep8-代碼規(guī)范
http協(xié)議支持的請(qǐng)求方式: 1.get請(qǐng)求:查詢 2.post請(qǐng)求:提交數(shù)據(jù)(添加記錄) 3.delete請(qǐng)求:刪除數(shù)據(jù) 4.put/patch:更新數(shù)據(jù)
視圖類(lèi)
url路由工作過(guò)程

重寫(xiě)dispatch,不論get還是post請(qǐng)求都會(huì)執(zhí)行

ModelForm
回顧Forms組件
http://www.rzrgm.cn/yuanchenqi/articles/9036474.html
modelform比f(wàn)orm功能強(qiáng)大
form組件除了校驗(yàn),別的都干不了
form組件,多選項(xiàng)
ModelForm-views.py

class Add

add.html

class edit


ModelForm-models.py

modelform只有編輯頁(yè),添加頁(yè),才有意義
權(quán)限
url地址權(quán)限校驗(yàn),嚴(yán)格限制頭和尾
url登錄校驗(yàn),每一個(gè)url都應(yīng)該校驗(yàn)用戶有無(wú)權(quán)限訪問(wèn)
不可能每個(gè)url視圖都寫(xiě)一遍校驗(yàn)代碼
解決辦法:寫(xiě)中間件。

permissionValid.py
校驗(yàn)權(quán)限的中間件需要放過(guò)一些URL,如login

admin組件
admin.py
通過(guò)admin添加表,相當(dāng)于navicat
參考:
浙公網(wǎng)安備 33010602011771號(hào)