2013-07-28 37 views
4

截至目前,我有我的登記表和我的登錄表格在兩個不同的頁面上,我似乎無法將它們放在一個視圖中,因爲我做到了這一點,這些視圖需要不同的返回語句。因此,這裏是我的註冊視圖功能:如何在同一索引頁面上登錄和註冊表單

def register_user(request): 
    if request.method == 'POST': 
     form = MyRegistrationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/accounts/register_success') 

    args = {} 
    args.update(csrf(request)) 

    args['form'] = MyRegistrationForm() 

    return render_to_response('register.html', args) 

def register_success(request): 
     return render_to_response('register_success.html') 

,這裏是我的登錄和認證的看法:

def login(request): 
    c = {} 
    c.update(csrf(request)) 
    return render_to_response('login.html', c) 

def auth_view(request): 
    username = request.POST.get('username', '') 
    password = request.POST.get('password', '') 
    user = auth.authenticate(username=username, password=password) 

    if user is not None: 
     auth.login(request, user) 
     return HttpResponseRedirect('/accounts/loggedin') 
    else: 
     return HttpResponseRedirect('/accounts/invalid') 

這裏是頁日誌模板:

  <form action="/accounts/auth/" method="post">{% csrf_token %} 
       <label for="username">User name:</label> 
       <input type="text" name="username" value="" id="username"> 
       <label for="password">Password:</label> 
       <input type="password" name="password" value="" id="password"> 

       <input type="submit" value="login" /> 

      </form> 

和這裏是註冊頁面的模板:

<h2>Register</h2> 
<form action="/accounts/register/" method="post">{% csrf_token %} 
{{form}} 

<input type="submit" value="Register" /> 

</form> 

再一次,我似乎無法把它們放在一起,因爲意見必須返回不同的東西..任何想法如何做到這一點?

編輯:這是我的urls.py:

url(r'^admin/', include(admin.site.urls)), 
url(r'^$', index), 
url(r'^accounts/auth/$', auth_view), 
url(r'^invalid/$', invalid_login), 
url(r'^accounts/register/$', register_user), 
url(r'^accounts/register_success/$', register_success), 

所以它只會如果URL賬戶使用register_user視圖/註冊,我希望它用戶register_view觀點如果是主頁(^$)。我的索引視圖是這樣的:

def index(request): 
    c = {} 
    c.update(csrf(request)) 
    return render_to_response('index.html', c) 

它基本上只是添加一個csrf標記到我的index.html(登錄模板,如上所示)。這就是爲什麼我想能夠以某種方式合併索引和register_user視圖,因爲register_user視圖調用在註冊模板中使用的實際form = MyRegistrationForm(request.POST)(註冊模板使用{{form}}

+1

我認爲這將產生一個很好的分離,當涉及到的意見。我不會改變它。 –

+0

爲什麼你會希望它在同一視圖中的任何原因? –

+0

好的,我編輯了我的文章,你能再次閱讀編輯部分嗎?我改變了我想放在一起的兩個觀點。 – user216485

回答

7

如果你只是想顯示在同一頁面登錄和註冊。有兩種形式創建的HTML頁面。其中一人的行動網址'/accounts/register/'另有1 '/accounts/auth/'

例如,改變你的register.html到:

<html> 
    <head><body> 
     <form action="/accounts/auth/" method="post">{% csrf_token %} 
      <label for="username">User name:</label> 
      <input type="text" name="username" value="" id="username"> 
      <label for="password">Password:</label> 
      <input type="password" name="password" value="" id="password"> 

      <input type="submit" value="login" /> 

     </form> 
     <h2>Register</h2> 
     <form action="/accounts/register/" method="post">{% csrf_token %} 
      {{form}} 

      <input type="submit" value="Register" /> 

     </form> 
    </body> 
</html> 

當提交表格時,它會去correspo根據該視圖查看並重定向。

編輯:傳遞MyRegistrationForm例如,您可以按以下步驟更新指標view

def index(request): 
    c = {} 
    c.update(csrf(request)) 
    c.update({'form':MyRegistrationForm()}) 
    return render_to_response('index.html', c) 

使用的login.html如上答案的HTML代碼。

+0

好的我編輯了我的帖子,你能再次閱讀編輯部分嗎?我改變了我想放在一起的兩個觀點。 – user216485

+0

您可以通過視圖索引將MyRegistrationForm實例傳遞給indedx.html。請在我的答案中找到我的編輯。 –

0

你可以在Javascript的幫助下做到這一點。讓我們先創建一個輸入字段:

<input type="hidden" name="button-name" id="button-name" value="" /> 

<input type="submit" name="register-button" id="register-button" onclick="changeValue()" /> 

function changeValue(){ 
    document.getElementById('button-name').value="register" 
} 

現在,在意見做到這一點:

button_name = request.POST['button-name'] 

if button-name=='register': 
    # Do the registration 
    # Redirect to another view or template 

else: 
    # Do your login thing 
    # Redirect where you want 
相關問題