解析POST请求 - object()不带参数

时间:2016-09-24 15:17:08

标签: django

我尝试访问帖子请求并检查是否已存在邮件请求中的邮件用户。当我尝试将数据发送到端点时,我收到错误

TypeError: object() takes no parameters

my views.py

@csrf_exempt
class CheckIfEmailAvailable():

   @csrf_exempt
   def check(request):
      email = request.POST.get("email")
      if User.objects.filter(email=email).exists():
         return Response({'status': 'not available'})

我的url.py     url(r' ^ api / checkmail /',CheckIfEmailAvailable,name =' check'),

我做错了什么?

3 个答案:

答案 0 :(得分:1)

您需要继承您的通用django视图以使其工作。 Url模式期望一个可以接受请求(带有args和kwargs)并返回响应的可调用对象。 View.as_view类方法为您返回一个callable。

# In views file
from django.views.generic import View

...

class CheckIfEmailAvailable(View):

      def get(self, request, *args, **kwargs):
          return self.check(request) # or something else depends on your use case

# In urls file
from django.views.decorators.csrf import csrf_exempt
...
url(r'^api/checkmail/', csrf_exempt(CheckIfEmailAvailable.as_view()), name='check'),

此外,csrf_exempt装饰器在类上没有工作(开箱即用),也没有在绑定方法上工作。更好的方法是在网址中使用它们。

答案 1 :(得分:1)

在这种情况下,最好在url中使用函数

from your_app.views import check

url(r'^api/checkmail/', check, name='check')

并且您的视图将像这样(仅限功能)

@csrf_exempt
def check(request):
  email = request.POST.get("email")
  if User.objects.filter(email=email).exists():
     return JsonResponse({'status': 'not available'})

另外,如果您想将@csrf_exempt与您应该使用dispatch的课程一起使用,您可以获得更多信息here

JsonResponse的例子

from django.http import JsonResponse
def your_view(request):
    return JsonResponse({'foo':'bar'})

答案 2 :(得分:0)

如果您发布了完整的回溯,您会发现错误不是来自解析请求; Django甚至没有达到那么远。

您无法将类视为此类视图。您应该将check作为独立函数,没有类,并直接在您的网址中引用它。

Django确实支持基于类的视图,但它们具有非常特定的结构,需要从适当的基类继承,并以特定的方式在urls.py中引用。