我尝试访问帖子请求并检查是否已存在邮件请求中的邮件用户。当我尝试将数据发送到端点时,我收到错误
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'),
我做错了什么?
答案 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中引用。