django registration auth - 如何检查有效输入?

时间:2014-06-17 06:17:40

标签: django django-forms django-templates django-registration

您可以查看我的改进代码吗?从本质上讲,它可以工作,但它不是用户友好的。例如,(1)如果用户输入无效字段,则不会告诉他们哪个字段无效。 (2)如果用户尝试使用现有用户名注册(注册),则用户无法区分该错误。或者,如果用户输错密码确认,则用户也不会知道该错误。 (3)此外,如果用户产生输入错误,则注册页面会清空所有字段,因此用户必须重新输入所有信息。可以想象,对于该用户来说,这可能会非常令人沮丧。

我试着看看form.error_messages是否可以帮助用户,error_messages是没用的。

您如何改进代码,以便(1),(2),(3)对用户来说不是一件麻烦事?还有一件事,只是好奇你将如何改变CSS?我注意到大多数专业网站注册页面突出显示无效的输入框。我对如何将更改应用于{{form | as_bootstrap}}

的css一无所知

非常感谢你的帮助!

form.py:

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm


class MyRegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True,help_text="Email field is required.")
    firstname = forms.CharField(max_length=50, required=False, help_text="Optional. Can fill in later.")
    lastname = forms.CharField(max_length=50, required=False, help_text="Optional. Can fill in later.")

    class Meta:
        model = User
        fields = (
                  'username',
                  'email',
                  'password1',
                  'password2',
                  'firstname',
                  'lastname'
        )

        def save(self, commit=True):
            user = super(UserCreationForm, self).save(commit=False)
            user.email = self.cleaned_data["email"]
            user.firstname = self.cleaned_data["firstname"]
            user.lastname = self.cleaned_data["lastname"]
            if commit:
                user.save()
            return user

views.py

from django.shortcuts import render, render_to_response
from django.http import HttpResponseRedirect
from django.contrib import auth
from django.core.context_processors import csrf
from forms import MyRegistrationForm


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

        args = {}
        args.update(csrf(request))
        args['form']= form
        print form.errors #this line doesn't print anything
        return render_to_response('register.html', args)
    else:
        return HttpResponseRedirect('/')

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

register.html

{% extends 'base.html' %}
{% load bootstrap_toolkit %}
{
{% block title %}
    <title>Register</title>
{% endblock %}
<body>
{% block content %}

    <div class="col-sm-9 col-sm-offset-3 col-md-6 col-md-offset-2 main">
        <h2>Register</h2>
        {% if form.error_messages %}
            <p class="error"> {{ form.error_messages }}.</p>
        {% endif %}

        <form class="form-signup" role="form"  action="/account/register/" method="post"> {% csrf_token %}

        {{ form|as_bootstrap }}
            <input type="submit" value="Register" class="btn btn-primary"/>
        </form>
    </div>
{% endblock %}
</body>

0 个答案:

没有答案