Django - Ajax 注册

Posted

技术标签:

【中文标题】Django - Ajax 注册【英文标题】:Django - Ajax registration 【发布时间】:2012-11-10 14:05:15 【问题描述】:

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

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

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


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

【问题讨论】:

如何首先呈现带有最终错误的表单? 我使用标准的 http 响应重新加载表单。因此,如果我收到 http 响应,我只需将其加载到容器中 【参考方案1】:

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

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

【讨论】:

这似乎更适合我的需要。让我试试 没问题。谢谢你的提问,我学到了一个新东西:)【参考方案2】:

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

希望对你有帮助

【讨论】:

好的,我现在明白你的要求了,但是没有像这样包装视图的经验,所以很遗憾无法帮助你。【参考方案3】:

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

【讨论】:

以上是关于Django - Ajax 注册的主要内容,如果未能解决你的问题,请参考以下文章

Django框架form表单配合ajax注册

Django - 基于forms组件和Ajax实现注册登录 - FileField字段 - Media配置

Django Crud,Django crd应用程序,Django-ajax Crud,Djano Boilerplate应用程序,姜戈注册,姜戈登录,姜戈文件上传,Crud,Bootstrap,aj

Django 第十七篇使用Form组件和Ajax实现用户注册

使用 django-allauth 实现 Ajax 请求/响应

ajax实现用户注册