解決方法1:
Django默認開啟防止csrf(跨站點請求偽造)攻擊,在post請求時,沒有上傳 csrf字段時,導致校驗失敗,報403錯誤
MIDDLEWARE = [
# 'django.middleware.csrf.CsrfViewMiddleware',
]
注釋掉此段代碼,即可。
缺點:導致Django項目完全無法防止csrf攻擊
解決方法2:
在 views.py文件中
#導入,可以使此次請求忽略csrf校驗
from django.views.decorators.csrf import csrf_exempt
#在處理函數加此裝飾器即可
@csrf_exempt
def post(request):
name=request.post['name']
return HttpResponse('welcome!{}'.format(name))
缺點:導致此次請求無法防止csrf攻擊,但是比第一種好很多
解決方法3:
django的 csrf 安全工作順序是:先從后台獲取csrf_token
並發送給前端,然后前端在進行form表單提交時,把帶有名為 csrfmiddlewaretoken
,值為 csrf_token
的字段一起發送給后端進行校驗。
所以此解決方案便是按照此邏輯,先通過一個接口獲取 csrf_token
,然后在form表單中一起提交給后端校驗
在views.py
from django.template.context_processors import csrf
def get_csrf(request):
#生成 csrf 數據,發送給前端
x = csrf(request)
csrf_token = x['csrf_token']
return HttpResponse('{} ; {}'.format(str(re), csrf_token))
然后在另一個POST請求中 加參數 名為:csrfmiddlewaretoken 值為 get_csrf函數返回的csrf_token ,這樣校驗便成功
優點:完成了 csrf 安全校驗