我正在尝试允许django-registration register
从模式对话框注册(使用此视图)到我的一个应用程序。
由于此表单位于模式框中,因此我想在成功时获得 json 响应(而不是默认重定向)
如何使用此视图 ( django-registration register
) 来管理注册并在成功时发回 json 响应?
我知道如何做出 ajax/json 响应,问题是如何在没有重定向行为的情况下使用 django-registration 视图或将其包装到其他视图中来管理响应。
我正在尝试允许django-registration register
从模式对话框注册(使用此视图)到我的一个应用程序。
由于此表单位于模式框中,因此我想在成功时获得 json 响应(而不是默认重定向)
如何使用此视图 ( django-registration register
) 来管理注册并在成功时发回 json 响应?
我知道如何做出 ajax/json 响应,问题是如何在没有重定向行为的情况下使用 django-registration 视图或将其包装到其他视图中来管理响应。
首先,您需要更改 urls.py 以使用其他功能包装现有视图。为此,您必须在 backends 文件夹中创建一个新的后端包并在其中更改 urls.py,同时保持其他所有内容不变,或者您可以继续修改后端包中的现有 urls.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
如果您需要它来获得更多视图,您可以使用它创建一个装饰器。
您询问如何使用现有视图来管理注册并在成功时发回 json 响应。由于 HttpResponseRedirect 在视图中几乎是硬编码的,因此您不能按原样使用视图。相反,要么分叉它,要么编写您自己的视图并更改 urls.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)))
希望这可以帮助
我为什么要做的是检查request.is_ajax()
您是否在正常的 after-successfull-registration-redirect 视图中并在那里返回 json 响应。