forms组件渲染标签、展示信息、校验数据的一些补充,forms组件参数和源码剖析,modelform组件,Django中间

今日内容

forms组件渲染标签

forms组件渲染标签的方式1

    <p>forms组件渲染标签的方式1</p>    
    {{ form_obj.as_p }}   
    {{ form_obj.as_table }    
    {{ form_obj.as_ul }}
'''封装程度高 扩展性差 主要用于本地测试'''

forms组件渲染标签的方式2

    <p>forms组件渲染标签的方式2</p>
    <p style="color: red">label标签和form分开写</p>
    {{ form_obj.username.label }}
    {{ form_obj.username }}
    {{ form_obj.age.label }}
    {{ form_obj.age }}
    {{ form_obj.email.label }}
    {{ form_obj.email }}
'''封装程度过低 扩展性高 编写麻烦'''

forms组件渲染标签的方式3

    <p>forms组件渲染标签的方式3</p>
    {% for form in form_obj %}
        {{ form.label }}
        {{ form }}
    {% endfor %}
'''封装程度较高 扩展性高 编写简单 推荐使用'''

注意事项

	forms组件只负责渲染获取用户数据的标签 form标签和按钮都需要自己写
    前端的校验可以随意更改 最终都需要后端校验 在使用forms组件的时候可以直接取消前端帮我们的校验
    <form action="" novalidate>

forms组件展示信息

后端不同请求返回的forms对象一定要是相同的变量名

def ad_forms_func(request):
    #1.产生一个空对象
    form_obj = MyForm()
    if request.method == 'POST':
        form_obj=MyForm(request.POST) 
        #requestPOST可以看成是一个字典 直接传给forms类进行校验 字典中无论有多少键值对都没关系 只在乎类中编写的
        if form_obj.is_valid():#判断数据是否合法
            print(form_obj.cleaned_data)
        else:
            print(form_obj.errors)
     #2.将该对象传递给html页面
   	 return render(request,'formsPage.html',locals())

错误信息

<form action="" method="post" novalidate>
    {% for form in form_obj %}
        <p>
            {{ form.label }}
            {{ form }}
        <span>{{ form.errors.0 }}</span> #固定这样写
        </p>
        

针对错误信息的提示可以修改成各国语言

方式1:自定义内容

	给字段添加error_messages参数
    error_messages={'max_length':'用户名最多8个字',
					'min_length':'用户名最少两个字',
					'required':'用户名不能为空',
												 }

	error_messages={'required':'邮箱不能为空',
                    'invalid':'邮箱格式不对'}

方式2:修改系统语言环境

from django.conf import global_settings
改成简体中文

forms组件校验补充

forms组件针对字段数据的校验 提供了三种类型的校验方式(可以一起使用)

第一种类型:

直接填写函数:直接填写参数			max_length

第二种类型:

使用正则表达式:                    validators
	from django.core.validators import RegexValidator
    
    phone = forms.CharField(validators=							[RegexValidator(r'^[0-9]+$','请输入数字'),
             RegexValidator(r'^159[0-9]+$','数字必须是以159开头')
                                                       '''                                                        每个字段都可以加validators字段 
   可以写多个RegexValidator参数                         '''

第三种类型:

钩子函数							编写代码自定义校验规则

在类中编写函数
	class MyForm(forms.Form):
    	username = forms.CharField(max_length=8, min_length=2, label='用户名')
		#局部钩子
    def clean_username(self):
        username = self.cleaned_data.get('username')
        if username == 'jason':
            self.add_error('username','用户名jason已存在')
        return username
    
    #全局钩子
    def clean(self):
        password=self.cleaned_data.get('password')
        confirm_pwd = self.cleaned_data.get('confirm_pwd')
        if not password == confirm_pwd:
            self.add_error('confirm_pwd','两次密码不一致')
        return self.cleaned_data
    
#钩子函数>>>:数据已经通过上述校验以后 相当于最后一个关卡 在所				  有的校验参数之后触发 
#局部钩子:每次只校验一个字段数据     校验用户是否已存在
#全局钩子:一可以校验多个字段数据     校验两次密码是否一致
'''
注意:拿什么就要返回什么 拿所有返回所有
'''

forms组件参数补充

min_length				最小字符
max_length				最大字符
min_value				最小值
max_value				最大值
label					字段注释
error_messages			错误提示
validators				正则校验器
initial					默认值
required				是否必填
widget					控制标签的各项属性

forms组件源码剖析


切入口:form_obj.is_valid()

modelform组件

'''
我们学习校验型组件的目的 绝大部分是为了数据录入数据库之前的各项审核forms组件使用的时候需要对照模型类编写代码 不够方便
'''

from django import forms
from app01 import models


class MyModelForm(forms.ModelForm):
    class Meta:
        model = models.UserInfo
        fields = '__all__'
        labels = {
            'username':'用户名'
        }


def ab_mf_func(request):
    modelform_obj = MyModelForm()
    if request.method == 'POST':
        modelform_obj = MyModelForm(request.POST,instance=User_obj)
        if modelform_obj.is_valid():
            modelform_obj.save()  # models.UserInfo.objects.create(...)/update(...)
        else:
            print(modelform_obj.errors)
    return render(request, 'modelFormPage.html', locals())

django中间件

django默认有七个中间件 并且还支持用户自定义中间件
中间件主要可以用于:网站访问频率的校验 用户权限的校验等全局类型的功能需求
  
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

如何自定义中间件
	1.创建存储自定义中间件代码的py文件或者目录(如果中间件很多)
	2.参考自带中间件的代码编写类并继承
 	3.在类中编写五个可以自定义的方法
    	需要掌握的
        	  process_request
            	1.请求来的时候会从上往下依次经过每一个注册了的中间件里面的该方法 如果没有则直接跳过
            	2.如果该方法自己返回了HttpResponse对象那么不再往后执行而是直接原路返回
 				process_response
             	1.响应走的时候会从下往上依次经过每一个注册了的中间件里面的该方法 如果没有则直接跳过
             	2.该方法有两个先request和response 形参response指代的就是后端想要返回给前端浏览器的数据 该方法必须返回该形参 也可以替换
             '''如果在执行process_request方法的时候直接返回了HttpResponse对象那么会原路返回执行process_response 不是执行所有'''
       需要了解的
           	 process_view
            process_exception
            process_template_response
	4.一定在配置文件中注册中间件才可以生效

posted @ 2022-12-22 08:22  李李大冒险  阅读(20)  评论(0编辑  收藏  举报
  1. 1 不可撤销
  2. 2 小年兽 程嘉敏
  3. 3 迷人的危险3 FAFA
  4. 4 山楂树之恋 程佳佳
  5. 5 summertime cinnamons / evening cinema
  6. 6 不谓侠(Cover 萧忆情Alex) CRITTY
  7. 7 神武醉相思(翻自 优我女团) 双笙(陈元汐)
  8. 8 空山新雨后 音阙诗听 / 锦零
  9. 9 Wonderful U (Demo Version) AGA
  10. 10 广寒宫 丸子呦
  11. 11 陪我看日出 回音哥
  12. 12 春夏秋冬的你 王宇良
  13. 13 世界が终わるまでは… WANDS
  14. 14 多想在平庸的生活拥抱你 隔壁老樊
  15. 15 千禧 徐秉龙
  16. 16 我的一个道姑朋友 双笙(陈元汐)
  17. 17 大鱼 (Cover 周深) 双笙(陈元汐)
  18. 18 霜雪千年(Cover 洛天依 / 乐正绫) 双笙(陈元汐) / 封茗囧菌
  19. 19 云烟成雨(翻自 房东的猫) 周玥
  20. 20 情深深雨濛濛 杨胖雨
  21. 21 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  22. 22 斑马斑马 房东的猫
  23. 23 See You Again Wiz Khalifa / Charlie Puth
  24. 24 Faded Alan Walker
  25. 25 Natural J.Fla
  26. 26 New Soul Vox Angeli
  27. 27 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  28. 28 像鱼 王贰浪
  29. 29 Bye Bye Bye Lovestoned
  30. 30 Blame You 眠 / Lopu$
  31. 31 Believer J.Fla
  32. 32 书信 戴羽彤
  33. 33 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  34. 34 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  35. 35 慢慢喜欢你 LIve版 戴羽彤
  36. 36 病变 戴羽彤
  37. 37 那女孩对我说 (完整版) Uu
  38. 38 绿色 陈雪凝
  39. 39 月牙湾 LIve版 戴羽彤
像鱼 - 王贰浪
00:00 / 04:45
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 周有才

作曲 : 周有才

这是一首简单的歌

没有什么独特

试着代入我的心事

它那么幼稚

像个顽皮的孩子

多么可笑的心事

只剩我还在坚持

谁能看透我的眼睛

让我能够不再失明

我要记住你的样子

像鱼记住水的拥抱

像云在天空中停靠

夜晚的来到

也不会忘了阳光的温暖

我要忘了你的样子

像鱼忘了海的味道

放下所有梦和烦恼

却放不下回忆的乞讨

多么可笑的心事

只剩我还在坚持

谁能看透我的眼睛

让我能够不再失明

记住你的样子

像鱼记住水的拥抱

像云在天空中停靠

夜晚的来到

也不会忘了阳光的温暖

我要忘了你的样子

像鱼忘了海的味道

放下所有梦和烦恼

却放不下回忆的乞讨

只剩自己就好