解析POST请求 - object()不带参数
问题描述:
我尝试访问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,名称= '检查'),
我在做什么错?
答
在这种情况下,最好使用功能的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'})
答
如果您发布了完整的回溯,您会看到该错误不是来自解析请求; Django甚至没有那么近。
您不能将类用作类似的视图。你应该有check
作为一个独立的功能,没有类,并直接在你的网址中引用它。
Django确实支持基于类的视图,但它们具有非常特定的结构,需要从适当的基类继承,并以特定的方式在urls.py中引用。
答
你需要继承你的类你的泛型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
装饰将无法在班工作(出箱),既不在为此事绑定方法。更好的方式应该是在网址中使用它们。
it says“/Users/me/Documents/Django/datingproject/datingproject/urls.py”,line 32,in url(r'^ api/checkmail /' ,check,name ='check'), NameError:名称'check'未定义 –
您应该导入您的视图。请添加“from your_app.views导入检查” –
现在它说.accepted_renderer没有设置响应:( –