Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django CSRF验证失败-基于类的视图_Django_Django Class Based Views_Django Csrf - Fatal编程技术网

Django CSRF验证失败-基于类的视图

Django CSRF验证失败-基于类的视图,django,django-class-based-views,django-csrf,Django,Django Class Based Views,Django Csrf,我使用的是基于类的视图 class UserCreate(View): def post(self, request): data = request.data.get social_id = data('social_id') social_source = data('social_source') user = User(social_id=social_id, social_source=social_source,

我使用的是基于类的视图

class UserCreate(View):
    def post(self, request):
        data = request.data.get
        social_id = data('social_id')
        social_source = data('social_source')
        user = User(social_id=social_id, social_source=social_source, access_token=access_token)
        user.save()
        return JsonResponse({'response':200})
每当我在此URL上发布数据时,它都会显示
CSRF令牌丢失或不正确。

curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" -d "{
  \"social_id\": \"string\",
  \"social_source\": \"FB/Gmail\",
  \"access_token\": \"string\"
}" "http://127.0.0.1:8000/users/"

我在函数视图中从表单获取数据时遇到了这个问题。在那里,我曾经在我的视图中添加@csrf_-emption,它会起作用。当我在我的
post
方法中添加@csrf\u emption时,它不起作用。如何发布数据?

@csrf\u export
是函数的装饰器,而不是基于类的视图。为了在CBV上获得CSRF豁免,请安装
django支架
,并按如下方式导入CSRFExcemptMixin:

从大括号.views导入CsrfExemptMixin

并通过以下方式实施:

class UserCreate(CsrfExemptMixin, View):
    def post(self, request):
        data = request.data.get
        social_id = data('social_id')
        social_source = data('social_source')
        user = User(social_id=social_id, social_source=social_source, access_token=access_token)
        user.save()
        return JsonResponse({'response':200})

@csrf\u export
是函数的装饰器,而不是基于类的视图。为了在CBV上获得CSRF豁免,请安装
django支架
,并按如下方式导入CSRFExcemptMixin:

从大括号.views导入CsrfExemptMixin

并通过以下方式实施:

class UserCreate(CsrfExemptMixin, View):
    def post(self, request):
        data = request.data.get
        social_id = data('social_id')
        social_source = data('social_source')
        user = User(social_id=social_id, social_source=social_source, access_token=access_token)
        user.save()
        return JsonResponse({'response':200})

这是因为基于类的视图,您需要
装饰
调度方法
,csrf才能工作

class UserCreate(View):
  @method_decorator(csrf_exempt)
  def dispatch(self, request, *args, **kwargs):
    return super(UserCreate, self).dispatch(request, *args, **kwargs)

  def post():
  ....

这是因为基于类的视图,您需要
装饰
调度方法
,csrf才能工作

class UserCreate(View):
  @method_decorator(csrf_exempt)
  def dispatch(self, request, *args, **kwargs):
    return super(UserCreate, self).dispatch(request, *args, **kwargs)

  def post():
  ....

您只需从CBV创建视图,并使用装饰器将其包装如下:

user\u view=csrf\u employ(UserCreate.as\u view())

完整示例:

views.py url.py
您只需从CBV创建视图,并使用装饰器将其包装如下:

user\u view=csrf\u employ(UserCreate.as\u view())

完整示例:

views.py url.py
我添加了完整的示例。我添加了完整的示例。Thanx。这对我真的很有帮助。这确实帮助了我。有关类装饰的更多信息,请参阅相关django文档的链接:有关类装饰的更多信息,请参阅相关django文档的链接: