中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于django 1.10 CSRF驗證失敗的解決方法

發布時間:2020-08-25 11:08:27 來源:腳本之家 閱讀:140 作者:Rocky_ 欄目:開發技術

最近工作閑,沒事自學django,感覺這個最煩的就是各版本提供的api函數經常有變化,不是取消了就是參數沒有了,網上搜到的帖子也沒說明用的是什么版本的django,所以經常出現搬運過來的代碼解決不了問題的情況,不過基本上遇到的坑不多,最坑的就是在提交post表單時弄了兩天的CSRF驗證失敗問題,特此記錄一下,我用的是django 1.10.3:

關于django 1.10 CSRF驗證失敗的解決方法

如果你不想使用這個功能,直接找到settings.py中的'django.middleware.csrf.CsrfViewMiddleware',這一行,直接給丫注釋掉,就不用啟動CSRF檢查了,一了白了,當然了如果你是練手的時候這么干還行,正式一點的項目還是啟用最好,省的被人搞跨站攻擊,到時候加班倒霉挨罵的還是你。

關于django 1.10 CSRF驗證失敗的解決方法

關于跨站攻擊簡單說一下我的理解,就是比如說你登錄了一個交友網站后,才可以修改提交自己的基本資料,此時登錄后cooikes就被記錄到本機了,你的基友嫉妒你,他做了一個假頁面A發給你,引誘你點擊或填寫提交后,直接把數據提交給了真正的交友網站,由于你之前已經登錄并且cooikes被記錄下來了,所以這次提交雖然是從假頁面A提交過去的,但是交友網站校驗是通過的,所以就可以任意修改提交數據,比如說把你的年齡惡意修改成60的一個老頭兒,導致你長期吃狗糧。。。

繼續說正事,那么如果想開啟怎么辦呢,首先把剛才注釋的'django.middleware.csrf.CsrfViewMiddleware'還是放開吧,然后繼續如下步驟:

1、首先弄個表單提交頁面search_form_post.html(該頁面模擬搜索并顯示在數據庫里保存的汽車列表),注意在from表單內增加{% csrf_token %}標簽,代碼如下:

 <!DOCTYPE html>
 <html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>搜索汽車</title>
 </head>
 <body>
  <form action="" method="post">
   {% csrf_token %}
   <input type="text" name="q"><input type="checkbox" name="chk_contains">是否模糊搜索
   <input type="submit" value="Search">
  </form>
 {{ message }}
 <p>
 {% for car in car_list %}
  <li>
   {{ car.brand }}
  </li>
 {% endfor %}
 </body>
 </html>

2、在你的apps模塊的views.py增加一個處理搜索提交的方法,代碼如下:

 from django.shortcuts import render
 
 
 def search_form_post(request):
  car_list = None
 
  if 'q' in request.POST:
   message = '你搜索的是: %r' % request.POST['q']
   if 'chk_contains' in request.POST:
    car_list = Car.objects.filter(brand__contains=request.POST['q'])
   else:
    car_list = Car.objects.filter(brand=request.POST['q'])
  else:
   message = '請輸入要搜索的內容并點擊搜索'
 
  return render(request, "search_form_post.html", {'message': message, 'car_list': car_list})

注意上邊關鍵的地方來了,django 1.10直接使用render方法就可以了,{% csrf_token %}標簽才會被自動替換為下圖一樣的隱藏域,我就是因為用的get_template("search_form_post.html").render(context),所以老是替換的值為空,因為當你使用這種方式加載模板的時候,不會自動替換{% csrf_token %}標簽,當然也有解決辦法,就是使用context.update(csrf(request)),來自己替換,不過挺麻煩的,還是用render方法自動替換方便

關于django 1.10 CSRF驗證失敗的解決方法

然后第三個參數,一定要使用{}花括號的字典數據類型,不要使用什么元祖、列表之類的數據類型了,這樣模板內的變量才能被正確替換顯示出來,我被坑主要就是{% csrf_token %}標簽不被自動替換+模板內變量不顯示,剩下的就是去urls.py里配置url去試試吧

關于django 1.10 CSRF驗證失敗的解決方法

以上這篇關于django 1.10 CSRF驗證失敗的解決方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

咸阳市| 咸丰县| 仁怀市| 铜山县| 邹城市| 普定县| 肇源县| 怀远县| 崇文区| 中西区| 新兴县| 乌鲁木齐县| 嘉鱼县| 米泉市| 溧阳市| 屏山县| 大城县| 荥阳市| 弥渡县| 浦东新区| 都安| 溧阳市| 新津县| 湘西| 石柱| 北辰区| 东光县| 融水| 九江县| 将乐县| 周口市| 随州市| 夏津县| 武邑县| 大邑县| 长岭县| 景洪市| 家居| 西藏| 和平县| 宁陕县|