网络编程
位置:首页>> 网络编程>> Python编程>> django-csrf使用和禁用方式

django-csrf使用和禁用方式

作者:pirate邹霉  发布时间:2023-08-13 15:13:34 

标签: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".

来源:https://www.cnblogs.com/zouruncheng/p/7161534.html

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com