2016-09-24 112 views
1

我尝试访问post请求并检查是否存在具有post请求的邮件的用户。当我尝试将数据发送到终点,我得到错误解析POST请求 - object()不带参数

TypeError: object() takes no parameters 

我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,名称= '检查'),

我在做什么错?

回答

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'}) 
+0

it says“/Users/me/Documents/Django/datingproject/datingproject/urls.py”,line 32,in url(r'^ api/checkmail /' ,check,name ='check'), NameError:名称'check'未定义 –

+0

您应该导入您的视图。请添加“from your_app.views导入检查” –

+0

现在它说.accepted_renderer没有设置响应:( –

0

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

您不能将类用作类似的视图。你应该有check作为一个独立的功能,没有类,并直接在你的网址中引用它。

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

1

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

# 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装饰将无法在班工作(出箱),既不在为此事绑定方法。更好的方式应该是在网址中使用它们。

+0

现在它抱怨URL(R '^ API/checkmail /',CheckIfEmailAvailable.as_view(),名称= '检查'), AttributeError的: '功能' 对象没有属性 'as_view' –

+0

删除csrf_exempt类装饰 – hspandher

+0

请立即注册并将其标记为正确答案,如果它帮助 – hspandher