2016-04-26 117 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。