2012-12-04 184 views
0

好麻煩,所以我有這樣的HTML表單:關於在Django用戶註冊表單

<form class="form" action="" method="post"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <button type="submit" value="register">Login</button> 
</form> 

這Django的觀點:

from django import forms 
from django.contrib.auth.forms import UserCreationForm 
from django.http import HttpResponseRedirect 
from django.shortcuts import render_to_response 
from django.template import RequestContext 

    def register(request): 
     if request.method == 'POST': 
      form = UserCreationForm(request.POST) 
      if form.is_valid(): 
       new_user = form.save() 
       return HttpResponseRedirect("/success/") 
     else: 
      form = UserCreationForm() 
     return render_to_response("signup.html", {'form': form,}, RequestContext(request)) 

這工作完全正常。但我希望能夠更多地定製原始表單。因此,爲了試圖找出如何做到這一點,我首先查看form.as_p函數的源代碼,然後嘗試手動複製它。我結束了這一點:

<form class="form" action="" method="post"> 
    {% csrf_token %} 
    <p> 
     <label for="id_username">Username:</label> 
     <input id="id_username" type="text" name="username" maxlength="30"> 
    </p> 

    <p> 
     <label for="id_password1">Password:</label> 
     <input type="password" name="password1" id="id_password"> 
    </p> 

    <p> 
     <label for="id_password2">Password confirmation:</label> 
     <input type="password" name="password2" id="id_password2"> 
    </p> 

    <button type="submit" value="register">Login</button> 
</form> 

但是,這是行不通的。我不明白爲什麼它沒有。如果form.as_p具有上面的輸出,那麼它理論上應該適用於視圖不應該嗎?任何幫助,將不勝感激。

+0

理論上它應該工作的罰款。什麼是不正確的工作?你設法查看HTML嗎?當您按下提交按鈕時,您的服務器是否註冊了一個請求? – Teisman

+0

它發出了一個成功的POST請求,但它返回到相同的頁面,因爲它應該如果表單沒有被正確提交(form.is_valid是假的)。 –

+0

的第一個密碼字段,是'password'或'password1'。如果ID爲'然後id_password'你有一個錯字那裏,'爲=「id_password1」'應該是'爲=「id_password」'和名稱應該是'name =「密碼」' –

回答

3

你的模板錯過了兩件事情:任何形式或CRC錯誤,和字段的任何預填充值。顯然發生的是is_valid確實是錯誤的,但是你沒有顯示任何錯誤。

而不是硬編碼在HTML中的字段,你應該使用模板變量:

{{ form.non_field_errors }} 
... 
<p> 
{{ form.username.label_tag }} 
{{ form.username }} 
{{ form.username.errors }} 
</p> 

+0

謝謝!什麼是密碼和確認密碼最好的實施? –