BBS论坛 自定义form组件

 

二、自定义form组件

from django import forms
from django.forms import widgets
from app01 import models


# 定制form组件
class MyForm(forms.Form):
    username = forms.CharField(max_length=8, min_length=3, label='用户名', error_messages={
        'max_length': '用户名长度超啦,不能超过8位!',
        'min_length': '兄dei,你输的用户名也太短了,最起码3位吧!',
        'required': '这么大的框,你至少输点东西吧!',
    }, widget=widgets.TextInput(attrs={
        'class': 'form-control',
    }))

    password = forms.CharField(max_length=8, min_length=3, label='密码', error_messages={
        'max_length': '密码长度超啦,不能超过8位!',
        'min_length': '兄dei,你输的密码也太短了,最起码3位吧!',
        'required': '密码这种东西,你至少输点东西吧!',
    }, widget=widgets.PasswordInput(attrs={
        'class': 'form-control',
    }))

    confirm_password = forms.CharField(max_length=8, min_length=3, label='确认密码', error_messages={
        'max_length': '确认密码长度超啦,不能超过8位!',
        'min_length': '兄dei,你输的确认密码也太短了,最起码3位吧!',
        'required': '密码这种东西,你至少输点东西吧!',
    }, widget=widgets.PasswordInput(attrs={
        'class': 'form-control',
    }))

    email = forms.EmailField(label='邮箱', error_messages={
        'required': '邮箱不能为空啊!',
        'invalid': '邮箱的格式你竟然写错了!'
    }, widget=widgets.EmailInput(attrs={
        'class': 'form-control'
    }))

    # 局部钩子  --> 校验用户名是否存在
    def clean_username(self):
        username = self.cleaned_data.get('username')
        user_obj = models.UserInfo.objects.filter(username=username).first()
        if user_obj:
            self.add_error('username', '这个用户名已经存在了,换一个试试吧!')
        return username

    # 全局钩子函数  --> 校验密码是否一致
    def clean(self):
        password = self.cleaned_data.get('password')
        confirm_password = self.cleaned_data.get('password')
        if not password == confirm_password:
            self.add_error('confirm_password', '兄弟,手抖了吧,两次输入的密码不一样啊!')
        return self.cleaned_data

 

posted @ 2019-06-20 21:51  xt12321  阅读(636)  评论(0编辑  收藏  举报