使用带有返回JsonResponse视图的django CSRF中间件
我想在Django中使用带有API视图的CSRF中间件。这是我想使用CSRF的演示视图,我不知道如何在这里集成CSRF使用带有返回JsonResponse视图的django CSRF中间件,django,api,request,response,csrf,Django,Api,Request,Response,Csrf,我想在Django中使用带有API视图的CSRF中间件。这是我想使用CSRF的演示视图,我不知道如何在这里集成CSRF def login(request): try: if len(DemoTable.objects.filter(phone=int(request.POST['user'])).filter(password=sha1Engine(request.POST['password'])))==1: print(DemoTable.o
def login(request):
try:
if len(DemoTable.objects.filter(phone=int(request.POST['user'])).filter(password=sha1Engine(request.POST['password'])))==1:
print(DemoTable.objects.filter(phone=int(request.POST['user'])).filter(password=sha1Engine(request.POST['password'])))
return JsonResponse({'exit':'0','msg':'Success'})
return JsonResponse({'exit':'2','msg':'User Invalid'})
except Exception as e:
return JsonResponse({'exit':'10','msg':'Unknown Error Occured'})
如有任何帮助或建议,将不胜感激。谢谢。您可以使用
django.middleware.csrf.get_token(请求)
然后在客户端发出的请求的标题中设置它
好的,那么这将完成您需要的操作要在响应中设置cookie,请使用decorator:
from django.views.decorators.csrf import ensure_csrf_cookie
@require_http_methods(["GET"])
@ensure_csrf_cookie
def list_things(request):
return JsonResponse({
"things": ["foo", "bar"],
})
$curl-ihttp://localhost:8000/api/v1/things
HTTP/1.1200ok
内容类型:application/json
变化:饼干
设置Cookie:csrftoken=nm4SdMB0pobkQ1ab7wZTFdwMlX8wr0vfT4iAg6Nqpcatl7ITRi9VOHrKf0Krbp2i;expires=周四,2020年3月5日15:25:53格林威治标准时间;最大年龄=31449600;路径=/;SameSite=Lax
{“事物”:[“foo”,“bar”]}
我知道如何将CSRF与表单集成,我正在尝试在此处添加带有简单JSON API的CSRF。添加@CSRF\u protect没有任何意义,只要您不禁用CSRF中间件,每个视图都会作为默认值受其保护。我这里的问题是,如何获取{csrf_token}}值以使用JsonResponse发送。@TheDeadMayan据我所知,唯一需要这样做的时间是在LoginView POST路由上。由于某些原因,这无法验证任何csrf令牌,因此我必须使用decorator强制执行它。但是,我必须创建一个定制的csrf中间件来发送令牌,因为我可以保护登录路由的唯一方法是将csrf设置为使用会话,然后在主页路由上使用强制csrf\u cookie
,这样我就可以取回会话cookie
from django.views.decorators.csrf import ensure_csrf_cookie
@require_http_methods(["GET"])
@ensure_csrf_cookie
def list_things(request):
return JsonResponse({
"things": ["foo", "bar"],
})