django1.10版本解决CSRF问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django1.10版本解决CSRF问题相关的知识,希望对你有一定的参考价值。

    >>> import django  
    >>> django.get_version()  
    ‘1.10.6‘  

(本文誊抄自之前自行编写的CSDN文档中)  

CSRF是(Cross-Site Request Forgery)跨站请求伪造,简单的用于防止恶意网站上的表单或者javascript利用用户登录过的认证信息,对网站进行某些操作,利用Django进行web开发过程中,如不对app下的views.py脚本和template下的html文件做重写,在进行POST时就会出现403错误;

 

如下使用题注自行开发的简易blog进行演示:

1.POST提交过程

技术分享

 

2.CSRF报错(Django setting.py脚本debug=True)

技术分享

3.根据help中提示的内容进行排除(Django项目中的setting.py文件的debug=True时才能显示详细信息):

重写html文件:

 

<!-- archive.html -->  
<form action="/blog/create/" method="post"><span style="color:#FF0000;">{% csrf_token %}</span>  
        Title:  
        <input type=text name=title><br>  
        Body:  
        <textarea name=body rows=3 cols=60></textarea><br>  
        <input type=submit>  
</form>  
<hr>  
  
{% for post in posts %}  
        <h2>{{post.title}}</h2>  
        <p>{{post.body}}</p>  
        <p>{{post.timestamp}}</p>  
  
{% endfor %}  

文中{% csrf_token %}字段

 

4.重写应用下的ciews.py

<span style="color:#FF0000;">from django.shortcuts import render</span>  
from datetime import datetime  
from django.http import HttpResponseRedirect  
from blog.models import BlogPost  
from django.template import RequestContext  
import django.middleware.csrf  
def create_blogpost(request):  
        if request.method == POST:  
                BlogPost(  
                title = request.POST.get(title),  
                body = request.POST.get(body),  
                timestamp = datetime.now(),  
  
                        ).save()  
        return HttpResponseRedirect(/blog/)  
  
  
def archive(request):  
        posts = BlogPost.objects.all().order_by(-timestamp)[0:]<span style="color:#FF0000;">  
        return render(request,archive.html,{posts:posts})</span>  

5.再次测试,能够正常post

技术分享

 

技术分享

以上是关于django1.10版本解决CSRF问题的主要内容,如果未能解决你的问题,请参考以下文章

centos7 + Apache2.4 + python3.5 +mod_wsgi4.5.15 + Django1.10安装指导

如何在python文件中,引用django1.10的model

使用Django1.10版本时,配置文件要注意的地方

vue与django中预防CSRF

基于Django1.10与Celery4实现异步队列任务

打开新的浏览器选项卡会使 Django 的 CSRF 令牌无效,从而阻止表单提交