Django學習 day70之Django第十六日
Django第十六日
一 django的session原理流程
二 自定義中介軟體
自定義步驟:
- 寫一個類,繼承
MiddlewareMixin
,匯入語法:from django.utils.deprecation import MiddlewareMixin
- 裡面寫方法process_request(請求來了,一定會觸發它的執行)
- 在setting中配置(注意順序,是放在前還是放在後)
MIDDLEWARE = [
'app01.mymiddle.MyMiddleware1',
]
三 process_request,process_response,process_view,process_exception
MiddlewareMixin
物件的四大方法
-
process_request
(request物件) -
process_response
(request物件,response物件) -
多箇中介軟體,執行順序是什麼?
請求來的時候從上往下執行:process_request
請求走的時候,從下往上執行:process_response
-
process_request
可以幹什麼?- 寫一箇中介軟體,不管前端用什麼編碼,在requset.data中都有post的資料
- 頻率限制(限制某個ip地址,一分鐘只能訪問5次)
- 登入認證(只要沒登入,重定向到login路徑)
- 記錄使用者訪問日誌(ip,時間,訪問路徑)
-
process_response
可以幹什麼?內部有response物件- 統一給所有(某幾個路徑)加cookie
- 統一給所有(某幾個路徑)加響應頭
-
process_view
路由匹配成功和檢視函式執行之前執行(callback就是檢視函式)
def process_view(self, request, callback, callback_args, callback_kwargs): # print(callback) # print(callback_args) # print(callback_kwargs) # res=callback(request) # 使檢視函式提前到process_view之前執行 # print("中介軟體1的process_view") return res
-
process_exception
檢視函式出錯,會執行它(全域性異常捕獲)(記錄日誌,哪個ip地址,訪問哪個路徑,出的錯)# 全域性異常捕獲,返回4開頭的 def process_exception(self, request, exception): print(exception) return render(request,'error.html')
四 CSRF_TOKEN跨站請求偽造
-
django解決csrf攻擊方法,利用中介軟體:
django.middleware.csrf.CsrfViewMiddleware
-
後期中介軟體不能註釋,每次傳送post請求,都需要攜帶csrf_token隨機字串
-
form表單提交
在form表單中{% csrf_token %}
-
ajax提交(如何攜帶)
- 方式一:放到data中
$.ajax({ url: '/csrf_test/', method: 'post', data: {'name': $('[name="name"]').val(), 'password': $('[name="password"]').val(), 'csrfmiddlewaretoken':$('[name="csrfmiddlewaretoken"]').val() /* 利用了元素查詢的方法 */ }, success: function (data) { console.log('成功了') console.log(data) }, error: function (data) { console.log('xxxxx') console.log(data) } })
- 方式二:放到data中
'csrfmiddlewaretoken':'{{ csrf_token }}'
- 方式三:放到頭中
headers:{'X-CSRFToken':'{{csrf_token}}'},
- 方式一:放到data中
-
-
全域性使用,區域性禁csrf
在檢視函式上加裝飾器的方法from django.views.decorators.csrf import csrf_exempt,csrf_protect # 全域性啟用,區域性禁用(中介軟體不能註釋,這個檢視函式,已經沒有csrf校驗了) @csrf_exempt def csrf_test(request): if request.method=='GET': return render(request,'csrf_test.html') else: name=request.POST.get('name') password=request.POST.get('password') print(name) print(password) return HttpResponse('登入成功')
-
全域性禁用,區域性使用csrf(需要註釋掉csrf中介軟體)
@csrf_protect def csrf_test(request): if request.method=='GET': return render(request,'csrf_test.html') else: name=request.POST.get('name') password=request.POST.get('password') print(name) print(password) return HttpResponse('登入成功')
-
古怪的使用方式,在urls.py中匯入裝飾器,並在路由中使用
path('csrf_test/', csrf_exempt(views.csrf_test))
相關文章
- Django學習Django
- Django學習(二) 之 模板的使用Django
- django學習(三)Django
- 【Python】Django學習1PythonDjango
- django(django學習) 兩張表建立 插入資料Django
- 學點簡單的Django之第一個Django程式Django
- Django的學習資源Django
- 學習Django的推薦Django
- Django之ModelFormDjangoORM
- Python學習之Django和Flask框架有什麼區別?PythonDjangoFlask框架
- 1.Django介紹與學習Django
- Django 視覺化Web展示 學習Django視覺化Web
- Python3-Django框架學習一PythonDjango框架
- 【django學習-24】自定義外掛Django
- Python學習之Django和其他Python框架有什麼區別?PythonDjango框架
- Django筆記四十一之Django中使用esDjango筆記
- Django基礎五之django模型層(二)多表操作Django模型
- Django練習-學生管理系統案例Django
- Python學習之路17-Django入門PythonDjango
- Django學習筆記(15)——中介軟體Django筆記
- Django學習筆記(12)——分頁功能Django筆記
- Django之mako模板使用Django
- Django 進階之 celeryDjango
- Django框架之模型層Django框架模型
- Python之Web框架DjangoPythonWeb框架Django
- Django之檢視層Django
- Django rest framework之ModelSerializDjangoRESTFramework
- Django(2) - Django模板Django
- Django基礎五之django模型層(一)單表操作Django模型
- Django學習筆記(20)——BBS+Blog專案開發(4)Django如何使用BootstrapDjango筆記boot
- python中web開發框架Django的學習PythonWeb框架Django
- Django 最佳學習路徑 | 涵蓋眾多學習資源Django
- Django(33)Django操作cookieDjangoCookie
- Django之Ubuntu環境搭建DjangoUbuntu
- Django框架之檢視層Django框架
- Django框架之Cookie和SessionDjango框架CookieSession
- Django框架之auth模組Django框架
- django-模板之標籤Django