Python系統學習-21
阿新 • • 發佈:2019-01-11
1.中介軟體
https://www.cnblogs.com/maple-shaw/articles/9333824.html
1. Django的請求的生命週期 2. 中介軟體的五種方法 process_request(self,request) 1. 執行時間 在檢視函式執行之前 2. 引數 request :請求物件 和檢視的引數是一個 3. 執行順序 按照註冊的順序 順序執行 4. 返回值 None : 正常流程 response物件: 正常流程後的process_request方法、檢視都不執行,執行執行當前中介軟體的process_response, response物件返回給瀏覽器 process_response(self, request, response) 1. 執行時間 在檢視函式執行之後 2. 引數 request :請求物件 和檢視的引數是一個 response : 檢視返回的響應物件 3. 執行順序 按照註冊的順序 倒敘執行 4. 返回值 response物件:必須返回 process_view(self, request, view_func, view_args, view_kwargs) 1. 執行時間 在檢視函式執行之前,在process_request之後,在路由匹配之後 2. 引數 request :請求物件 和檢視的引數是一個 view_func:檢視函式 view_args:檢視函式的位置引數 view_kwargs:檢視函式的關鍵字引數 3. 執行順序 按照註冊的順序 順序執行 4. 返回值 None : 正常流程 response物件: 之後中間的process_view方法、檢視不執行,執行所有中間的process_response process_template_response(self,request,response) 1. 執行時間 觸發條件: 檢視返回響應物件有一個render方法 時間: 在檢視執行之後 2. 引數 request :請求物件 和檢視的引數是一個 response : 檢視返回的響應物件 3. 執行順序 按照註冊的順序 倒敘執行 4. 返回值 response物件: 必須的 process_exception(self, request, exception) 1. 執行時間 觸發條件: 檢視層面有錯誤之後執行 2. 引數: request :請求物件 和檢視的引數是一個 exception: 錯誤物件 3. 執行順序 按照註冊的順序 倒敘執行 4. 返回值 None: 正常報錯 response物件:之後的中介軟體process_exception方法不執行,執行所有中介軟體的process_response 3. csrf中介軟體原始碼分析 from django.views.decorators.csrf import csrf_exempt,csrf_protect 2. ajax https://www.cnblogs.com/maple-shaw/articles/9524153.html 1. 發請求的途徑 1. 在瀏覽器地址上輸入地址 回車 ——》 GET 2. form表單 ——》 GET / POST 3. a標籤 ——》 GET 2. ajax 使用js技術傳送非同步請求 一般傳輸json資料 特點: 區域性重新整理 當前頁面不重新整理 非同步 1. 計算示例 $.ajax({ url:'/calc1/', type:'post', data:{ i1:$('[name="ii1"]').val(), i2:$('[name="ii2"]').val() }, success:function (res) { console.log(res); $('[name="ii3"]').val(res) } }) 2. ajax的引數介紹 上傳檔案 form_obj = new FormData(); form_obj.append('f1', $('#f1')[0].files[0]); $.ajax({ url: '/upload/', type: 'post', processData: false, # 告訴ajax不處理編碼方式 contentType: false, # 告訴ajax不處理contentType data: form_obj, success: function (res) { console.log(res); # 返回的響應的響應體 }, }) 3. 提交post請求的設定 前提有cookie csrftoken 1. 使用 {% csrf_token %} data: { i1: $('[name="i1"]').val(), i2: $('[name="i2"]').val(), csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val() }, 2. headers:{'X-csrftoken':$('[name="csrfmiddlewaretoken"]').val()}, 3. 使用檔案 3. form元件 https://www.cnblogs.com/maple-shaw/articles/9537309.html 1. 註冊示例 2. form元件的使用 1. 定義 # 註冊form class RegForm(forms.Form): user = forms.CharField(label='使用者名稱') pwd = forms.CharField(label='密碼',widget=forms.widgets.PasswordInput) 2. 使用 1. 檢視中 form_obj = RegForm() form_obj = RegForm(request.POST) form_obj.is_valid 布林值 2. 模板中 {{ form_obj.as_p }} —— 》 生成P標籤 (label 和 input) {{ form_obj.user }} —— 》 生成input框 {{ form_obj.pwd }} {{ form_obj.pwd.label }} ——》 對應的中文 {{ form_obj.pwd.id_for_label }} ——》 input的ID {{ form_obj.errors }} —— 》 所有錯誤提示 {{ form_obj.pwd.errors }} —— 》 某個欄位的所有錯誤提示 {{ form_obj.pwd.errors.0 }} —— 》 某個欄位的第一錯誤提示 3. 欄位及引數介紹 見部落格 min_length=8, max_length=16, label='使用者名稱', initial='alex', widget=forms.widgets.Input(attrs={'class': 'form-control'}), error_messages= 4. 內建校驗器和自定義檢驗 1. 內建的校驗 min_length=8, max_length=16, required 2. 自定義校驗 1. 提供校驗的類 from django.core.validators import RegexValidator 2. 函式 from django.core.exceptions import ValidationError def check_name(value): if 'alex' in value: raise ValidationError('涉黃') 5. is_valid原始碼解析及區域性、全域性鉤子 1. 區域性鉤子 校驗某個欄位 def clean_pwd(self): value =self.cleaned_data.get('pwd') if len(value)<6: raise ValidationError('密碼少於6位') return value 2. 全域性鉤子 def clean(self): pwd = self.cleaned_data.get('pwd') re_pwd = self.cleaned_data.get('re_pwd') if pwd == re_pwd: return self.cleaned_data self.add_error('re_pwd','兩次密碼不一致') raise ValidationError('兩次密碼不一致') 4. auth模組 https://www.cnblogs.com/maple-shaw/articles/9537320.html 1. 登入 1. auth.authenticate 驗證使用者名稱和密碼 obj = auth.authenticate(request, username=user, password=pwd) 2. login(request,user) 儲存登入狀態 寫session 3. login_required 登入之後才能訪問某個頁面 from django.contrib.auth.decorators import login_required 4. request.user.is_authenticated() 判斷登入狀態 2. 登出 3. 註冊 4. 擴充套件auth表