Django-Ajax注册
我正在尝试允许从模式对话框注册(使用此视图)我的一个应用程序 由于此表单位于模式框中,我希望在成功时获得json响应(而不是默认重定向) 如何使用此视图()管理注册并在成功时发回json响应Django-Ajax注册,django,django-views,django-registration,Django,Django Views,Django Registration,我正在尝试允许从模式对话框注册(使用此视图)我的一个应用程序 由于此表单位于模式框中,我希望在成功时获得json响应(而不是默认重定向) 如何使用此视图()管理注册并在成功时发回json响应 我知道如何做出ajax/json响应,问题是如何在没有重定向行为的情况下使用django注册视图,或者将其包装到另一个视图中来管理响应。为什么我要做的是检查是否请求。是否是\u ajax()在正常的成功后完全注册重定向视图中,并在那里返回json响应。您询问如何使用现有视图管理注册,并在成功后返回json
我知道如何做出ajax/json响应,问题是如何在没有重定向行为的情况下使用django注册视图,或者将其包装到另一个视图中来管理响应。为什么我要做的是检查
是否请求。是否是\u ajax()
在正常的成功后完全注册重定向视图中,并在那里返回json响应。您询问如何使用现有视图管理注册,并在成功后返回json响应。由于HttpResponseRedirect在视图中几乎是硬编码的,因此不能按原样使用视图。相反,请使用fork,或者编写自己的视图并更改url.py,以便r“^register/$”指向新视图
就json响应而言,如果成功,您可以执行以下操作:
from django.utils import simplejson as json
def register_ajax(request):
...
return HttpResponse(json.dumps(dict(success=True, **dict_containing_data)))
希望这有帮助首先,您需要更改url.py以使用其他功能包装现有视图。要做到这一点,您必须在backends文件夹中创建一个新的后端包,并在那里更改URL.py,同时保持其他所有内容不变,或者您可以继续修改后端包中现有的URL.py 我还没有测试过这个,但它应该可以工作 将url指向新视图:
# urls.py
url(r'^register/$', register_wrap,
{'backend': 'registration.backends.default.DefaultBackend'},
name='registration_register'),
# your new view that wraps the existing one
def register_wrap(request, *args, **kwargs):
# call the standard view here
response = register(request, *args, **kwargs)
# check if response is a redirect
if response.status_code == 302:
# this was redirection, send json response instead
else:
# just return as it is
return response
如果你需要更多的视图,你可以用它创建一个装饰器 首先,如何呈现表单及其最终错误?我使用标准http响应重新加载表单。因此,如果我收到http响应,我只需将其加载到containerOk中,我现在了解您的要求,但没有包装类似视图的经验,因此很遗憾,我无法帮助您完成这项工作。这似乎更适合我的需要。让我试试没问题。谢谢你的提问,我学到了一个新东西:)