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默认安全机制,保持其安全特性。