Django API Post 403 FORBIDDEN

本文介绍了在使用Django框架时遇到的CSRF验证失败问题及其原因,并提供了两种解决方案:一种是在表单中加入CSRF令牌;另一种是对于API接口使用`csrf_exempt`装饰器来禁用CSRF检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 测试Django编写的POST方法的API,报出下面的错误:

``` Forbidden (403) CSRF verification failed. Request aborted. You are seeing this message because this site requires a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties. If you have configured your browser to disable cookies, please re-enable them, at least for this site, or for 'same-origin' requests. ```

2. ROOT CAUSE

Django提供了CSRF的防护。CSRF是跨站点请求伪造,简单来说就是用户在访问受信任网站后,浏览器记录了受信任网站的cookie,此时用户在不登出受信任网站的同时访问了危险网站,危险网站的请求和cookie一起到达服务器,服务器Session未过期的时候,就误认为该请求是用户发出的,从而被危险网站利用。在建立Django项目的时候,setting.py中就会有 ``` MIDDLEWARE = [ .... 'django.middleware.csrf.CsrfViewMiddleware', .... ] ```

3. solution

1. 如果是表单,可以在模版文件中加入` {% csrf_token %} `,而且模版的函数使用`reander`。 2. 如果是API也就没有模版,此时无法添加` {% csrf_token %} `,最后找到方法可以使用 `django.views.decorators.csrf` 的 `csrf_exempt`函数对POST的API函数进行修饰。可以使其避免CSRF安全检查机制。 例:
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def add_event(request):

看网上又说将'django.middleware.csrf.CsrfViewMiddleware'注释掉,最好还是不要如此做,保持django默认安全机制,保持其安全特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值