Form组件、auth认证组件、自定义图片验证码登录、 自定义分页

Form组件、auth认证组件、自定义图片验证码登录、 自定义分页[Python常见问题]

12.7 Form组件

Django form组件实现的功能:生成页面可用的HTML标签、对用户提交的数据进行校验、保留上次输入内容

12.71 使用form组件实现注册功能

views.py:

# 按照Django form组件的要求写一个类
from django import forms
from django.forms import fields
from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError
# 自定义验证规则
def passward_validate(value):
    mobile_re = re.compile(r"^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$")
    if not mobile_re.match(value):
        raise ValidationError("手机号码格式错误")
        
class RegForm(forms.Form):
    username = forms.CharField(
        min_length=8,
        label="用户名",
        initial="张三"        # 设置默认值,初始值,input框里面的初始值
        error_messages={      #重写错误信息。
            "required": "不能为空",
            "invalid": "格式错误",
            "min_length": "用户名最短8位"
        }
    )
    pwd = forms.CharField(
        min_length=6, 
        label="密码",
        widget=forms.widgets.PasswordInput(attrs={"class": "c1"}, render_value=True)
                                        #给input标签添加class="c1",刷新页面保留原input框中的值
        validators=[RegexValidator(r"^[0-9]+$", "请输入数字"), RegexValidator(r"^159[0-9]+$", "数字必须以159开头")],                       #自定义正则校验器,如果不符合正则匹配则显示"请输入数字"
        validators=[passward_validate, ],#使用自定义验证函数
    )                                   
    
    gender = forms.fields.ChoiceField(
        choices=((1, "男"), (2, "女"), (3, "保密")),
        label="性别",
        initial=3,
        widget=forms.widgets.RadioSelect()  #单radio值为字符串
    )
    hobby = forms.fields.ChoiceField(       #单选Select
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"), ),
        label="爱好",
        initial=3,
        widget=forms.widgets.Select()
    )
    hobby = forms.fields.MultipleChoiceField(   #多选Select
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"), ),
        label="爱好",
        initial=[1, 3],
        widget=forms.widgets.SelectMultiple()
    )
    keep = forms.fields.ChoiceField(            #单选checkbox
        label="是否记住密码",
        initial="checked",
        widget=forms.widgets.CheckboxInput()
    )
    hobby = forms.fields.MultipleChoiceField(   #多选checkbox
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
        label="爱好",
        initial=[1, 3],
        widget=forms.widgets.CheckboxSelectMultiple()
    )
  def __init__(self, *args, **kwargs):          #动态choices选项
        super(RegForm,self).__init__(*args, **kwargs)
        # self.fields["hobby"].choices = ((1, "篮球"), (2, "足球"),)
        self.fields["hobby"].choices = models.Hobby.objects.all().values_list("id","name")
​
# 使用form组件实现注册方式
def register2(request):
    form_obj = RegForm()
    if request.method == "POST":
        form_obj = RegForm(request.POST)    # 实例化form对象的时候,把post提交过来的数据直接传进去   
        if form_obj.is_valid():             # 调用form_obj校验数据的方法
            #print(form_obj.cleaned_data)    # 获取所有经过验证的数据
            models.User.objects.create(**form_obj.cleaned_data)
            return HttpResponse("注册成功")
    return render(request, "register.html", {"form_obj": form_obj})
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Form组件、auth认证组件、自定义图片验证码登录、 自定义分页