2012-11-22 140 views
2

我试图允许从模态对话框注册(使用此django-registration register视图)我的应用程序之一。Django - Ajax注册

由于这种形式是一个模式对话框,我想获得成功(而不是默认的重定向)

如何使用这个视图(django-registration register)的JSON效应初探管理登记和发回复json对成功的回应?


我知道如何使AJAX/JSON响应,问题是如何使用Django的注册视图,而不重定向行为,或将其包装成另一种观点来管理响应。

+0

如何在第一个地方渲染表单的最终错误? –

+0

我使用标准http响应重新加载表单。所以,如果我收到http响应,我只是将它加载到容器中 –

回答

2

首先,您需要更改urls.py来包装现有的视图与另一功能。为此,您必须在后端文件夹中创建一个新的后端包,并在其中更改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 

如果你将需要这更多的意见你可以创建一个使用这个装饰。

+0

这似乎更适合我的需求。让我试试吧 –

+0

工作很好,非常感谢你! –

+0

没问题。感谢您的提问以及我学到了一件新东西:) – maulik13

0

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

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))) 

希望这有助于

+0

谢谢,但检查我的更新问题 –

+0

好吧,我现在明白你要求什么,但没有经验,像这样包装的意见,所以不幸的是不能帮助你接着就,随即。 – Teisman