您好,登錄后才能下訂單哦!
如何正確的使用django-csrf?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
orm表單使用csrf
a. 基本應用
form表單中添加
{% csrf_token %}
b. 全站禁用
# 'django.middleware.csrf.CsrfViewMiddleware',
c. 局部禁用
'django.middleware.csrf.CsrfViewMiddleware', from django.views.decorators.csrf import csrf_exempt @csrf_exempt def csrf1(request): if request.method == 'GET': return render(request,'csrf1.html') else: return HttpResponse('ok')
d. 局部使用
# 'django.middleware.csrf.CsrfViewMiddleware', from django.views.decorators.csrf import csrf_exempt,csrf_protect @csrf_protect def csrf1(request): if request.method == 'GET': return render(request,'csrf1.html') else: return HttpResponse('ok')
ajax提交數據
Ajax提交數據時候,攜帶CSRF:
a. 放置在data中攜帶
<form method="POST" action="/csrf1.html"> {% csrf_token %} <input id="user" type="text" name="user" /> <input type="submit" value="提交"/> <a onclick="submitForm();">Ajax提交</a> </form> <script src="/static/jquery-1.12.4.js"></script> <script> function submitForm(){ var csrf = $('input[name="csrfmiddlewaretoken"]').val(); var user = $('#user').val(); $.ajax({ url: '/csrf1.html', type: 'POST', data: { "user":user,'csrfmiddlewaretoken': csrf}, success:function(arg){ console.log(arg); } }) } </script>
b. 放在請求頭中
<form method="POST" action="/csrf1.html"> {% csrf_token %} <input id="user" type="text" name="user" /> <input type="submit" value="提交"/> <a onclick="submitForm();">Ajax提交</a> </form> <script src="/static/jquery-1.12.4.js"></script> <script src="/static/jquery.cookie.js"></script> <script> function submitForm(){ var token = $.cookie('csrftoken'); var user = $('#user').val(); $.ajax({ url: '/csrf1.html', type: 'POST', headers:{'X-CSRFToken': token}, data: { "user":user}, success:function(arg){ console.log(arg); } }) } </script>
補充知識:在django的form表單及ajax提交的數據中添加認證的csrfmiddlewaretoken
1. 對于ajax提交數據,把下面的代碼加入到js的頭部,可以保證ajax執行時自動提交參數csrfmiddlewaretoken。
$.ajaxSetup({data: {csrfmiddlewaretoken: '{{ csrf_token }}' }});
2. 對于form表單提交數據,在表單內部加入{% csrf_token %}標簽,會自動生成一個input標簽
<form>{% csrf_token %}</form>
得到
<form><input name="csrfmiddlewaretoken" value="..." type="hidden"></form>
或者使用js添加:
$("#csrf_token").replaceWith("{% csrf_token %}");
3. 另外記錄一下使用模板過濾器處理form.field的方法
$("#{{ field.name }}").replaceWith('{{ field|linebreaksbr }}'); $(".{{ field.name }}").text('{{ field.errors|striptags }}'); {{ value|linebreaksbr }}: "Joel\nis a slug" => "Joel<br>is a slug" {{ value|striptags }}: "<b>Joel</b> <button>is</button> a <span>slug</span>" => "Joel is a slug".
看完上述內容,你們掌握如何正確的使用django-csrf的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。