2016-04-26 118 views
0

我是初學者python Django。並嘗試在教程的幫助下構建發佈文章網站。我被困在UserCreationForm中。我使用UserCreationForm創建了一個表單,但是當我提交表單時,我無法既不提交表單也不能在頁面上獲取任何錯誤消息。Django UserCreationForm既不會給出錯誤信息也不會註冊用戶

views.py代碼

from django.shortcuts import render_to_response 
from django.contrib.auth import authenticate 
from django.http import HttpResponseRedirect 
from django.contrib import auth 
from django.template.context_processors import csrf 
from django.contrib.auth.forms import UserCreationForm 

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

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

    args['form'] = UserCreationForm() 
    print args 
    return render_to_response('register.html', args) 


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

register.html

{% extends "base.html" %} 

{% block content %} 

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

     {{form}} 

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

    </form> 

    {% endblock %} 

register_success.html

{% extends "base.hml" %} 

    {% block content %} 

    <h2>You have registered!</h2> 
    <p>Click <a href="/accounts/login/">Here</a> to login again</p> 

{% endblock %} 
+0

您是否調試過您的HTML以查看

方法是POST?那麼在** register_user ** –

+0

上加'else返回HttpResponse('不是來自POST方法')'是不是'{{args.form}}'? –

+0

@AndrésPérez-AlbelaH。它給了我「不是從帖子」 –

回答

1

你可以使用Django Generic Views,特別是CreateView,它會讓你的生活變得輕鬆很多。您可以使用它像這樣:

from django.views.generic import CreateView 

class CreateUserView(CreateView): 
    template_name = 'register.html' 
    form_class = UserCreationForm 
    success_url = '/accounts/register_success' 

添加到您的urls.py,你是好去:

from mysite.views import CreateUserView 

# add this url pattern 
url(r'^sign_up/$', CreateUserView.as_view(), name='signup'), 
3

的問題是,你總是創建一個空白表單。

args['form'] = UserCreationForm() 

這意味着當表單無效時,您看不到POST請求的任何錯誤。

而應該只爲GET請求創建空白表單。

from django.shortcuts import render 

def register_user(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/accounts/register_success') 
    else: 
     form = UserCreationForm() 
    args = {'form': form} 
    return render(request, 'register.html', args) 

注意,我已通過使用render代替過時render_to_response簡化視圖。這意味着你不需要手動處理csrf。