ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Day59

2022-05-24 00:01:09  阅读:179  来源: 互联网

标签:name label forms Day59 length cookie class


今日总结

  • forms组件钩子函数
  • forms组件字段参数
  • forms组件字段类型
  • forms组件源码分析
  • cookie与session简介
  • django操作cookie与session

forms组件钩子函数

# 钩子函数的含义其实就是在程序的执行过程中穿插额外的逻辑

# 局部钩子:校验用户名是否已存在(一次性只能勾一个人)
	def clean_name(self):  # 自动生成的函数名 专门用于对name字段添加额外的校验规则
        # 1.先获取用户名
        name = self.cleaned_data.get('name')
        # 2.判断用户名是否已存在
        is_exist = models.User.objects.filter(name=name)
        if is_exist:
            # 3.提示信息
            self.add_error('name', '用户名已存在')
        # 4.最后将你勾上来的name返回回去
        return name
    
# 全局钩子:校验密码与确认密码是否一致(一次性可以勾多个人)
	def clean(self):
        # 1.获取多个字段数据
        password = self.cleaned_data.get('password')
        confirm_password = self.cleaned_data.get('confirm_password')
        if not password == confirm_password:
            self.add_error('confirm_password', '两次密码不一致 你个傻帽!!!')
        # 最后将整个数据返回
        return self.cleaned_data

forms组件字段参数

min_length			最小长度
max_length			最大长度
label			字段名称
error_messages			错误提示
min_value			最小值
max_value			最大值
initial			默认值
validators			正则校验器

forms组件字段类型

initial 	# 初始值,input框里面的初始值
class LoginForm(forms.Form):
    username = forms.CharField(
        min_length=8,
        label="用户名",
        initial="张三"  # 设置默认值
    )
    pwd = forms.CharField(min_length=6, label="密码")
    
error_messages		# 重写错误信息
class LoginForm(forms.Form):
    username = forms.CharField(
        min_length=8,
        label="用户名",
        initial="张三",
        error_messages={
            "required": "不能为空",
            "invalid": "格式错误",
            "min_length": "用户名最短8位"
        }
    )
    pwd = forms.CharField(min_length=6, label="密码")
    
password
class LoginForm(forms.Form):
    ...
    pwd = forms.CharField(
        min_length=6,
        label="密码",
        widget=forms.widgets.PasswordInput(attrs={'class': 'c1'}, render_value=True)
    )
    
radioSelect		# 单radio值为字符串
class LoginForm(forms.Form):
    username = forms.CharField(
        min_length=8,
        label="用户名",
        initial="张三",
        error_messages={
            "required": "不能为空",
            "invalid": "格式错误",
            "min_length": "用户名最短8位"
        }
    )
    pwd = forms.CharField(min_length=6, label="密码")
    gender = forms.fields.ChoiceField(
        choices=((1, "男"), (2, "女"), (3, "保密")),
        label="性别",
        initial=3,
        widget=forms.widgets.RadioSelect()
    )
# 单选Select		
class LoginForm(forms.Form):
    ...
    hobby = forms.ChoiceField(
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"), ),
        label="爱好",
        initial=3,
        widget=forms.widgets.Select()
    )
    
# 多选Select
class LoginForm(forms.Form):
    ...
    hobby = forms.MultipleChoiceField(
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"), ),
        label="爱好",
        initial=[1, 3],
        widget=forms.widgets.SelectMultiple()
    )
    
# 单选checkbox	
class LoginForm(forms.Form):
    ...
    keep = forms.ChoiceField(
        label="是否记住密码",
        initial="checked",
        widget=forms.widgets.CheckboxInput()
    )
    
# 多选checkbox	
class LoginForm(forms.Form):
    ...
    hobby = forms.MultipleChoiceField(
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
        label="爱好",
        initial=[1, 3],
        widget=forms.widgets.CheckboxSelectMultiple()
    )

ModelForm简介

forms组件主要配合models里面的默写类一起使用 但是默写类里面的字段需要在forms类中相当于重写一遍 代码冗余 为了更好的结合forms与models的关系 就有了ModelForm(基于forms组件)

class MyUser(forms.ModelForm):
    class Meta:
        model = models.User  # 指定关联的表
        fields = '__all__'  # 所有的字段全部生成对应的forms字段
        labels = {
            'name': '用户名',
            'age': '年龄',
            'addr': '地址',
            'email': '邮箱'
        }
        widgets = {
            "name": forms.widgets.TextInput(attrs={"class": "form-control"}),
        }
        
def reg(request):
    form_obj = MyUser()
    if request.method == 'POST':
        form_obj = MyUser(request.POST)
        if form_obj.is_valid():
            # form_obj.save()  # 新增数据
            edit_obj = models.User.objects.filter(pk=5).first()
            form_obj = MyUser(request.POST, instance=edit_obj)  # 是新增还是保存就取决于有没有instance参数
            form_obj.save()  # 编辑数据
    return render(request, 'reg.html', locals())

cookie与session简介

# cookie
	早期的互联网应用程序都是不保存用户状态的 所有人发送请求返回的都是相同的页面
    	现在几乎所有的应用程序都可以保存用户状态
    当你成功登录之后浏览器会在本地帮你保存用户名和密码
  		每次操作浏览器自动发送用户名和密码
        
        # cookie指代存储在客户端上与用户信息相关的数据
        
# session简介
	用户登录成功之后 服务端生成一个随机字符串 返回给客户端保存
  		之后客户端每次发请求携带该随机字符串 服务端获取之后比对后台数据
        
        # session指代服务端保存的跟用户信息相关的数据
        
"""
1.session的工作必须依赖于cookie
2.客户端也有权拒绝保存数据
"""

django操作cookie

# 设置cookie
	res.set_cookie()  
    # 参数
    key		键
    value=''	值
    max_age=None	超时44过期时间
    expires=None	过期时间,需要传具体日期,同时设置max_age,expires那么将会使用expires的值作为过期时间
    path='/', Cookie生效的路径,/ 表示根路径,根路径的cookie可以被任何url的页面访问
    domain=None, Cookie生效的域名
    secure=True, 该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false。当使用https式,必须要secure设置为Y=True
    httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
# 获取cookie
  	res.COOKIE.get()  # 获取
    # 参数
    default		默认值
    salt	加密盐
    max_age		过期时间

标签:name,label,forms,Day59,length,cookie,class
来源: https://www.cnblogs.com/ymxda9/p/16303947.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有