无法使用Django rest框架提交发布请求(“详细信息”:“ CSRF失败:CSRF令牌丢失或不正确。”)

时间:2019-09-16 18:55:13

标签: python django django-rest-framework django-rest-viewsets django-rest-framework-jwt

我进入网站很奇怪,如果我使用permission_classes = [AllowAny]或isAuthenticate类,则尝试提交表单,但遇到错误CSRF Failed: CSRF token missing or incorrect

在以下情况下,将弹出一个输入密码和用户名的弹出窗口。我全班都像

class AddReview(APIView):
    serializer_class = ReviewSerializer
    authentication_classes = (BasicAuthentication,)
    def post(self, request):  
        rest = request.POST.get('restaurant')
        dish = request.POST.get('dish')

我的 settings.py

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',

    ),
}

我只想提交一个自定义表单来提交数据。任何使问题变得更好的帮助或建议都将受到高度重视。

更新

我可以使用

提交表单
class SessionAuthentication(SessionAuthentication):
    def enforce_csrf(self, request):
        return

但是为什么我必须执行它?我在做什么错了?

1 个答案:

答案 0 :(得分:0)

理想情况下,您的网站表单应具有csrf令牌,并且也应将其发送到服务器。也许像这样:

<form method="post">{% csrf_token %}</form>
  1. 默认情况下,在MIDDLEWARE设置中激活了CSRF中间件。
  2. 如果您想禁用CSRF保护,只需使用csrf_exempt()装饰器

参考

https://docs.djangoproject.com/en/2.2/ref/csrf/#csrf-protection-should-be-disabled-for-just-a-few-views

https://docs.djangoproject.com/en/2.2/ref/csrf/