url(r‘^csrf1.html/‘, views.csrf1),
def csrf1(request):
if request.method == "GET":
return render(request,‘csrf1.html‘)
else:
return HttpResponse(‘ok‘)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>csrf1.html</title>
</head>
<body>
<form action="csrf1.html" method="POST">
{% csrf_token %}#获取csrf_token,并且生成了一个隐藏的input标签
{{ csrf_token }}#这个是显示csrf_token,自己测试看看
<input type="text"/>
<input type="submit" value="提交">
</form>
</body>
</html>
在django里面打开csrf机制
通过浏览器访问http://127.0.0.1:8000/csrf1.html,如果没有开启这个csrf机制,关闭以后就不会认证。开启后,不获取随机csrf_token就会报错
csrf是随机的一个字符串,会发给服务端,然后再次访问的时候带着这个字符串
如果想让某一个函数不验证了,其他的使用怎么操作?????
要想完成上面的操作,需要添加一个装饰器,如下
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‘)
全局禁用,局部使用,怎么操作????
from django.views.decorators.csrf import csrf_exempt,csrf_protect
# @csrf_exempt
@csrf_protect#局部使用
def csrf1(request):
if request.method == "GET":
return render(request,‘csrf1.html‘)
else:
return HttpResponse(‘ok‘)
上面的这些都是FBV里面的操作,下面我们队CBV如何操作那
在django中的cbv里面,添加装饰器是有不一样的地方的,它需要把装饰器当成参数传递给另外一个模块中的,如下面
from django.views import View
from django.utils.decorators import method_decorator
@method_decorator(csrf_protect)
class Foo(View):
def get(self,request):
pass
def post(self,request):
pass
django 版本为1.913的导入View是这样的:from django.views.generic.base import View
也可以通过下面的方式加
还可以指定那个添加
也可以通过dispatch来全部加上(cbv 的原理dispatch)
注意针对csrf,只能添加到类上面,
ajax提交数据时候,携带csrf。值获取到,然后通过data携带
需要插件jquery.cookies.js插件
$.cooike(‘csrftocken‘)这个是获取,担任也可以设置
原文地址:http://blog.51cto.com/sgk2011/2073119