Django的form组件应用登陆或者注册

from django import forms
from django.forms import Form
from django.forms import widgets
from django.forms import fields
from django.core.exceptions import ValidationError
from blog.models import *


class RegisterForm(Form):
    # 自定义form组件
    username = fields.CharField(
        label='用户名',
        widget=widgets.TextInput(attrs={'class': 'form-control', 'placeholder': "请输入用户名"}),
        required=True,
        max_length=32,
        strip=True,
        error_messages={
            'required':'用户名不能为空',
            'max_length':'用户名最大长度为32',
        }
    )
    email = fields.EmailField(
        label='邮箱',
        widget=widgets.TextInput(attrs={'class': 'form-control', 'placeholder': "请输入邮箱"}),
        required=True,
        error_messages={
            'required': '邮箱不能为空',
            'invalid': '邮箱格式错误',
        }
    )
    password = forms.RegexField(
        label='密码',
        # regex='^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$\%^&*()])[0-9a-zA-Z!@#$\%^&*()]{8,32}$',
        # regex='^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,32}$',
        regex='^[0-9A-Za-z]{6,32}$',
        min_length=6,
        max_length=32,
        required=True,
        widget=widgets.PasswordInput(attrs={'class': 'form-control', 'placeholder': "请输入密码"}),
        error_messages={'required': '密码不能为空.',
                        'invalid': '密码必须包含数字,字母、特殊字符',
                        'min_length': '密码长度不能小于6个字符',
                        'max_length': '密码长度不能大于32个字符',
                        }
    )
    confirm_pwd = fields.CharField(
        label='确认密码',
        widget=widgets.PasswordInput(attrs={'class': 'form-control', 'placeholder': "请再次输入密码"}),
        required=True,
        min_length=6,
        max_length=32,
        error_messages={'required': '密码不能为空.',
                        'min_length': "密码长度不能小于6个字符",
                        'max_length': "密码长度不能大于32个字符"}
    )
    # check_code = fields.CharField(
    #     widget=widgets.TextInput(attrs={'class': 'form-control', 'placeholder': "请输入验证码"}),
    #     required=True,
    #     error_messages={'required': '验证码不能为空.', }
    # )

    def clean_username(self):
        v = self.cleaned_data.get('username')
        if UserInfo.objects.filter(username=v).count():
            raise ValidationError('用户名已存在')
        else:
            return v

    def clean_email(self):
        v = self.cleaned_data.get('email')
        if UserInfo.objects.filter(email=v).count():
            raise ValidationError('邮箱已存在')
        else:
            return v

    def clean(self):
        v1 = self.cleaned_data.get('password')
        v2 = self.cleaned_data.get('confirm_pwd')
        if v1 == v2:
            pass
        else:
            raise ValidationError('密码输入不一致')
原文地址:https://www.cnblogs.com/Alone-Tree/p/9785796.html