1. 程式人生 > 程式設計 >django-csrf使用和禁用方式

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',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 }}: "Joel <button>is</button> a <span>slug</span>" => "Joel is a slug".

以上這篇django-csrf使用和禁用方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。