Django 用户认证 用户 邮箱登录 邮箱注册 ORM or,and,not form.py FORM ModelForm Paginator 分页 HTMl JQuery 定位元素 ajax django切片 restfulapi 跨域 Ubantu Python Mysql Scrapy 爬虫 导出 Python读写 Pycharm 破解 session re sqlit3 生成式 其他 Prism 富文本 CSS Nginx 部署 请求头 抓包 协议 selenium Ubuntu 宝塔 AI Comfy-ui ollama dify open-webui Git docker
form.py django Form ModelForm的使用方法
张建行 2024年12月9日 21:45 70 文章标签: Django 用户认证 邮箱登录 ORM form.py FORM ModelForm

说明,可以将代码粘到Pycharm中仔细读注释,说明了钩子方法的使用和字段的添加,组件的使用等,判断用户输入的两次密码是否一致等。

 from django.forms import *
 from users.models import UserProfile, User
 ​
 ​
 class LoginForm(Form):
     '''
     LoginFrom
     登录表单
     '''
     username = CharField(label='用户名', max_length=10,
                          error_messages={'max_length': '用户名不能长度不能超过10位'},
                          widget=TextInput(
                              attrs={'class': 'form-control',
                                     'placeholder': '请输入用户名:'}
                          ))
     password = CharField(label='用户密码',
                          min_length=6,
                          error_messages={'min_length': '密码长度不能少于6位'},
                          widget=PasswordInput(
                              attrs={'class': 'form-control',
                                     'placeholder': '请输入密码:'}
                          ))
 ​
     # 局部钩子方法  重写password字段的钩子方法
     def clean_password(self):
         password = self.cleaned_data.get('password')
         username = self.cleaned_data.get('username')
         # 判断用户名和密码一样
         if password == username:
             # 抛出对应的错误
             raise ValidationError('账号和密码不能一致!')
         # return 这个对应绑定的字段
         return password
 ​
 ​
 class RegisterForm(ModelForm):
     '''
     用户注册时的表单
     '''
     # error_messages={} 自定义错误信息 建议用默认信息就行
     password1 = CharField(label='确认密码',
                           min_length=6, error_messages={'min_length': '密码长度不能少于6位'},
                           widget=PasswordInput(
                               attrs={'class': 'form-control', 'placeholder': '请输入确认密码:'}))
 ​
     class Meta:
         model = User
         fields = ('username', 'password')
         widgets = {
             'username': TextInput(attrs={'class': 'form-control', 'placeholder': '请输入用户名:'}),
             'password': PasswordInput(attrs={'class': 'form-control', 'placeholder': '请输入密码:'})
         }
 ​
     # 重写password1字段的钩子方法
     # 自定义 局部的钩子方法 判断两次密码输入是否一致
     def clean_password1(self):
         # 获取通过验证的密码,判断两次输入的密码是否一致
         password = self.cleaned_data.get('password')
         password1 = self.cleaned_data.get('password1')
         # 如果两次输入的密码不一致,抛出对应的错误
         if password != password1:
             raise ValidationError('两次密码输入不一致,请重新确认!')
         # return 对应的字段
         return password1