2010-08-18 108 views
2

我有一個包含登錄和註冊表單的頁面index.html。我有一對夫婦的有關獲取這個問題才能正常工作初學者認證問題

我URLConfig看起來是這樣的:

urlpatterns = patterns('djangoproject1.authentication.views', 
    (r'^$',direct_to_template,{'template':'authentication/index.html'}), 
    (r'^register/$','register'), 
) 

1)使用Django的書的指導,我的形式如下:

<h1>Register</h1> 
    <form action="/register/" method="post"> 
     {{ form.as_p }} 
     <input type="submit" value="Register"> 
    </form> 

當然,由於文件是index.html,當我剛剛進入頁面時,表單不會顯示。我是否需要「視圖」來處理訪問index.html而不是direct_to_template?

2)我的註冊代碼如下所示:

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

這是Django的認證內置的東西。人們真的使用它嗎?看起來有限。我知道我可以通過使用用戶配置文件或其他東西將更多的字段添加到Django用戶,但UserCreationForm呢?我應該推出自己的形式嗎?它應該以某種方式繼承UserCreationForm嗎?

回答

0

direct_to_template本身既不生產也不處理形式 - 它只是直接呈現一個請求的模板,正如它的名字描述。

你可能會考慮django-registration登記。

如果你把兩種形式在同一頁上,你需要的是能夠呈現和處理這兩種形式的,雖然多形式的網頁是衆所周知的棘手與正常工作的自定義視圖。如果你有單獨的形式(和提交按鈕),你可以添加一個唯一的名稱給每個提交的輸入,並確定哪些形式(類)來驗證和處理基於對if name in request.POST


編輯:

你的代碼更加緊密地尋找後,我看到您的報名表重定向到一個不同的看法;這簡化了事情,但您仍然需要爲您的主頁定製視圖,以將登錄和註冊表單傳遞到模板進行呈現。

或者,如果你只是重定向到處理每個表單頁面,你可以直接在你的urls.py添加使用direct_to_templateextra_context參數的形式:

from wherever import LoginForm, RegistrationForm 

urlpatterns = patterns('djangoproject1.authentication.views', 
    (r'^$', 
     direct_to_template, 
     { 
      'template': 'authentication/index.html', 
      'extra_context': { 
       'reg_form': RegistrationForm(), 
       'login_form': LoginForm() 
      } 
     } 
    ), 
    (r'^register/$', 'register'), 
) 

這種做法是不最乾淨的,但它是一個選項,如果你真的想要使用通用的看法。

0

這聽起來像你可能想要使用不同的通用視圖,而不是direct_to_tepmlate。看看create object通用視圖。我通常只是創建一個視圖,通常我最終需要做的比通用視圖允許我輕鬆做的更多。