2012-11-22 168 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