用户注册案例(form写法)

image.png

一、切入点使用form

让页面生成写好的表单,从form切入,注册用户名,昵称,密码,确认密码,邮箱,验证码

  • 常用的函数

  • {{obj_register.non_field_errors.0}}显示all
  • from django.core.validators import RegexValidator用来写正则的
  • from django.core.exceptions import ValidationError用来捕获clean异常的
  • from django import forms 用来继承的
  • from django.forms import fields 用来调用字段的
  • from django.forms import widgets 用来引入页面插件的
  • 注意点

  • 验证码判断

首先我们将验证是储存在session中,而session是在request中,这里我们需要构造一个继承的函数,给我们form表单函数加入一个属性

class Base(object):
    def __init__(self,request,*args,**kwargs):
        self.request = request
        super(Base,self).__init__(*args,**kwargs)
  • clean_name 重写
  • 用户名、邮箱、判断是结合数据库查找判断是否存在
  • 验证码是去session判断
  • 多字段判断clean
  • 判断两次输入的密码是否正确使用clean
    当我们想给某个字段加上额外的判断时候,一定要重写clean_name
  • widgets.TextInput 为标签属性赋值
  • widgets.CheckboxInput({'value':"0"}),checkbox设置
from  django import forms
from  django.forms import fields
from  django.core.validators import RegexValidator
from .base import Base
from repository import models
from django.core.exceptions import  ValidationError
from django.forms import widgets
class accountform(Base,forms.Form):
    username = fields.CharField(
        label= "用名",
        widget= widgets.TextInput(attrs={'class':'form-control'}),
        validators=[RegexValidator(r'^[a-zA-Z0-9_-]{4,16}$','4到16位(字母,数字,下划线,减号)')],
        error_messages = {'required':'不能为空',}
    )

    nickname = fields.CharField(
        label="昵称",

        widget=widgets.TextInput(attrs={'class': 'form-control'}),
        validators=[RegexValidator(r'^[a-zA-Z0-9_-]{4,16}$', '4到16位(字母,数字,下划线,减号)')],
        error_messages={'required': '不能为空', }
    )
    password = fields.CharField(
        label="密码",
        widget=widgets.PasswordInput(attrs={'class': 'form-control'}),
        validators=[RegexValidator(r'^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$','以字母开头,字母,数字,减号,下划线')]
        ,error_messages = {'required': '不能为空', }
    )

    confirm_password = fields.CharField(
        label="密码",
        widget=widgets.PasswordInput(attrs={'class': 'form-control'}),
        validators=[RegexValidator(r'^[a-zA-Z]([a-zA-Z0-9]{5,19})+$', '以字母开头,字母,数字,减号,下划线')]
        ,error_messages = {'required':'不能为空',}
     )

    email = fields.EmailField(
        label="邮箱",
        widget=widgets.TextInput(attrs={'class': 'form-control'}),
        error_messages={'inisvalid':'请输入正确的邮箱','required':'邮箱不能为空'})

    check_code = fields.CharField(
        label="验码",
        error_messages={'required':'验证码不能为空'}
    )

    # avatar_img = fields.ImageField(
    #     label="头像",
    #     error_messages={'invalid_image':"请上传图片类型",'required':'不能为空'}
    # )

    def clean_username(self):
        v = self.cleaned_data['username']
        have_name = models.UserInfo.objects.filter(username=v).count()
        if have_name:
            raise ValidationError('用户名存在')
        return v

    def clean_email(self):
        v = self.cleaned_data['email']
        has_email = models.UserInfo.objects.filter(email=v).count()
        if has_email:
            raise ValidationError('邮箱存在')
        return v

    def clean_check_code(self):
        v = self.cleaned_data['check_code']
        if self.request.session.get('CheckCode').upper() != v.upper():
            raise ValidationError('验证码错误')
        return v
    def clean(self):
        value_dict = self.cleaned_data
        paw = value_dict.get('password')
        con_pax = value_dict.get('confirm_password')
        print(paw)
        if paw != con_pax:
            raise ValidationError('密码不一致')
        return  value_dict


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在上一个章节,我们已经创建了一个基础的Blog程序。现在我们将使用一些Dajngo高级功能,去实现一个完整的blo...
    金金刚狼阅读 9,014评论 1 12
  • ModelForm 请参考官方文档 一、Form组件初识 参考博客一 武沛奇老师博客参考博客二 Django的F...
    CaiGuangyin阅读 9,120评论 1 3
  • 关于JET是新式的Django管理界面并且增强了功能。 内容 文档 开始 安装django-jet 安装仪表盘...
    CNSumi阅读 12,400评论 2 15
  • 小时候在姥姥家的小农村上的小学,那里每天中午都要自己带饭,那个时候,每家每户也不是很富裕,虽然姥爷开小卖部还算不错...
    美啦美啦美啦阅读 1,450评论 0 0
  • 三伏已过,暑热未消。 本以为今天会是个适合外出活动的阴凉天,谁知道我们几个又晒黑了一层回来,哈哈! 早早地叫醒了苗...
    飘扬007阅读 3,982评论 0 3

友情链接更多精彩内容