S20_DAY22--課堂筆記

今日重點

CBV(class base views)
ModelForm
權限-rbac-(role-based access control)
admin組件 

課堂筆記

1 CBV
  看源碼
  
  url("login",views.LoginView.as_view()) 
  

  views.LoginView.as_view()=view
  一旦用戶訪問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創建一對多的關係,外鍵字段創建在多的一方
                publish=models.ForeignKey(to="Publish",to_field="nid",on_delete=models.CASCADE)
                # 與Author表創建多對多的關係,ManyToManyField能夠建在兩個模型中的任意一個,自動建立第三張表
                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請求:
                    form=BookModelForm()
                    return render(request,"addbook.html",locals()) # 標籤渲染 {{form.as_p}}
        
                if post請求:
                
                   form=BookModelForm(request.POST) 
                   if form.is_valid():
                       form.save() # create操做
                       
        editBook:
            def editbook():
                if get請求:
                    editbook=Book.objects.get(pk=id)
                    form=BookModelForm(instance=editbook)
                    return render(request,"addbook.html",locals()) # 標籤渲染 {{form.as_p}}
        
                if post請求:
                   editbook=Book.objects.get(pk=id)
                   form=BookModelForm(request.POST,instance=editbook) 
                   if form.is_valid():
                       form.save() # update操做
                       
        
        
        
CRM:


1 權限
  
  什麼是權限?  一個包含正則表達式的url就是權限
  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   銷售
       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          
         
         
         
    權限:
        login:
              註冊session(查詢)
        
        中間件:
              # 白名單校驗(正則)
              # 登陸校驗
              # 權限校驗
         
                  

2 admin組件
    Django後臺數據庫管理工具(web頁面)
    目的:
        1 使用組件
        2 看源碼
        3 本身獨立開發一個相似組件
        
            
    1 使用組件admin
    
      一旦註冊Book:
         url:
           查看書籍: http://127.0.0.1:8007/admin/app01/book/
           添加書籍   http://127.0.0.1:8007/admin/app01/book/add/
           編輯書籍: http://127.0.0.1:8007/admin/app01/book/1/change/
           刪除書籍: http://127.0.0.1:8007/admin/app01/book/1/delete/
           
          
    
今日做業:
    1 權限的菜單欄
    2 單例模式


https://www.cnblogs.com/yuanchenqi/articles/8323452.html
https://www.cnblogs.com/yuanchenqi/articles/8715364.html


3 crm
  ---客戶表管理
  ---學生以及學習記錄的管理

 

CBV

FBV(function base views) 就是在視圖裏使用函數處理請求。html

CBV(class base views) 就是在視圖裏使用類處理請求。git

cbv-->restful風格接口-->restframework
 
Python的pep8-代碼規範
http協議支持的請求方式:
1.get請求:查詢
2.post請求:提交數據(添加記錄)
3.delete請求:刪除數據
4.put/patch:更新數據

視圖類web

 

url路由工做過程正則表達式

重寫dispatch,不論get仍是post請求都會執行數據庫

 

 

ModelForm

回顧Forms組件django

http://www.cnblogs.com/yuanchenqi/articles/9036474.htmlrestful

modelform比form功能強大
form組件除了校驗,別的都幹不了

form組件,多選項session

 

ModelForm-views.py

class Addapp

add.html函數

class edit

ModelForm-models.py

 

modelform只有編輯頁,添加頁,纔有意義 

權限

url地址權限校驗,嚴格限制頭和尾

 

url登陸校驗,每個url都應該校驗用戶有無權限訪問
不可能每一個url視圖都寫一遍校驗代碼 解決辦法:寫中間件。

 

permissionValid.py

校驗權限的中間件須要放過一些URL,如login

 

admin組件

admin.py
經過admin添加表,至關於navicat

 

 

參考:

Django-admin管理工具

相關文章
相關標籤/搜索