Python Django API Post方法返回403错误

Python Django API Post方法返回403错误,python,django,http-post,http-status-code-403,Python,Django,Http Post,Http Status Code 403,我正在尝试设置DjangoAPI(后API端点)。我希望有相同的URL路径指向相同的函数,由于它是POST还是GET,处理方式不同。所以我用了这样的方法 def handle_post(request): dict = {} dict['email'] = "test" if request.method == "POST": return HttpResponse(json.dumps(dict), content_type="application

我正在尝试设置DjangoAPI(后API端点)。我希望有相同的URL路径指向相同的函数,由于它是POST还是GET,处理方式不同。所以我用了这样的方法

def handle_post(request):

    dict = {}
    dict['email'] = "test"

    if request.method == "POST":
        return HttpResponse(json.dumps(dict), content_type="application/json")
在url.py中,我有以下代码

router = routers.DefaultRouter()
router.register(r'notes', UsernotesViewSet)
urlpatterns = patterns('',
url(r'^', include(router.urls)),
url(r'^admin/', include(admin_site.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^docs/', include('rest_framework_swagger.urls')),
url(r'^example/postrequest', handle_post),
)
但当我在URL上执行POST时,我无法获得此工作。我没有发布任何内容,只是将方法从GET on httpclient更改为post,以尝试此API。如果我没有将任何内容发布到URL,可以吗

我得到403错误,如下所示:

禁止(403)
CSRF验证失败。请求已中止。
您看到此消息是因为此站点在提交表单时需要CSRF cookie。出于安全原因,需要使用此cookie,以确保您的浏览器不会被第三方劫持。 如果您已将浏览器配置为禁用Cookie,请重新启用Cookie,至少对于此站点或“同源”请求


谢谢你的帮助

阅读上的Django文档。如果您的api将由浏览器中的javascript访问,那么有一些关于如何在ajax请求中包含令牌的问题


如果以不同的方式访问API,例如从不使用Cookie的移动客户端访问API,则可以使用decorator关闭该视图的CSRF保护

我无法正确理解您的问题,但如果在未使用针对CSRF(跨站点请求伪造)的推荐防御设置的情况下执行“通过“不安全”方法(如POST、PUT和DELETE)的请求”,则会导致CSRF验证失败

你可以阅读更多关于这方面的内容

有一个快速解决这个问题的方法。您可以使用csrf_emption decorator将视图标记为不受csrf视图中间件(django.Middleware.csrf.CsrfViewMiddleware)确保的保护。例如:

from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse

@csrf_exempt
def my_view(request):
    return HttpResponse('Hello world')
您可以阅读更多关于is的信息。

禁止(403) CSRF验证失败。请求被中止

您看到此消息是因为此站点在提交表单时需要CSRF cookie。出于安全原因,需要使用此cookie,以确保您的浏览器不会被第三方劫持

如果您已将浏览器配置为禁用Cookie,请重新启用Cookie,至少对于此站点或“同源”请求


DEBUG=True提供了更多信息。

非常感谢。通过添加@csrf\u exemption,您的方式有效。有没有办法使用csrf令牌而不是对其进行豁免?