Django测试HTML表单实现登录过程中遇到错误提示:Forbidden (CSRF cookie not set.):

错误提示如下:

Django测试HTML表单实现登录过程中遇到错误提示:Forbidden (CSRF cookie not set.):_第1张图片

 提示的大概意思是说:没有设置CSRF cookie

1 什么是CSRF ?

CSRF(Cross-site request forgery)跨站请求伪造

· 功能:

        防止跨站请求伪造的功能

· 原理:

        客户端访问服务器端,在服务器端正常返回给客户端数据的时候,而外返回给客户端一段字符串,等到客户端下次访问服务器端时,服务器端会到客户端查找先前返回的字符串,如果找到则继续,找不到就拒绝。

· 访问流程:

        客户端 --> URL路由系统 --> CSRF --> 视图函数。

2 解决办法

        我这里要写的是一个内部使用的api接口,也不大会有 跨站请求伪造,所以这里提供两个不是很推荐,但是非常简单的方式解决这个问题,既然不需要 CSRF,我们就把CSRF检测关掉即可。

· 方法一

a. 在创建的项目中,找到settings.py配置文件

b. 在settings.py中找到 MIDDLEWARE参数,将其中的'django.middleware.csrf.CsrfViewMiddleware' 注释掉即可,如下图所示:

Django测试HTML表单实现登录过程中遇到错误提示:Forbidden (CSRF cookie not set.):_第2张图片

 

· 方法二

原理和方法一差不多,上面注释掉的django.middleware.csrf.CsrfViewMiddleware,是一个全局的设置,我们也可以对单个api 进行特别设置,这里我们使用 @csrf_exempt ,它可以取消当前函数防跨站请求伪造功能。

a. 找到当前应用的 views.py 文件;

b. 这里我们用 @csrf_exempt 处理api需要导包,from django.views.decorators.csrf import csrf_exempt ;

c. 我们在对应的视图函数上加上@csrf_exempt ,如下图所示:

Django测试HTML表单实现登录过程中遇到错误提示:Forbidden (CSRF cookie not set.):_第3张图片

 

你可能感兴趣的:(django,csrf,前端,python)