4

我正在尝试允许django-registration register从模式对话框注册(使用此视图)到我的一个应用程序。

由于此表单位于模式框中,因此我想在成功时获得 json 响应(而不是默认重定向)

如何使用此视图 ( django-registration register) 来管理注册并在成功时发回 json 响应?


我知道如何做出 ajax/json 响应,问题是如何在没有重定向行为的情况下使用 django-registration 视图或将其包装到其他视图中来管理响应。

4

3 回答 3

2

首先,您需要更改 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

如果您需要它来获得更多视图,您可以使用它创建一个装饰器。

于 2012-11-22T09:51:18.877 回答
0

您询问如何使用现有视图来管理注册并在成功时发回 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)))

希望这可以帮助

于 2012-11-22T09:02:00.323 回答
0

我为什么要做的是检查request.is_ajax()您是否在正常的 after-successfull-registration-redirect 视图中并在那里返回 json 响应。

于 2012-11-22T08:19:05.573 回答