今日内容概要
forms组件渲染标签
# forms组件渲染标签的方式一:
'''封装过高 扩展性差 主要用于被本地测试'''
{{ form_obj.as_p }}
{{ form_obj.as_ul }}
{{ form_obj.as_table }}
# forms组件渲染标签的的方式二:
'''封装程度过低 拓展性高 编写麻烦'''
{{ form_obj.username.label }}
{{ form_obj.username }}
{{ form_obj.age.label }}
{{ from_obj.age }}
# forms组件渲染标签的方式三:
'''封装程度较高 拓展性高 编写简单'''
{% for form in form_obj %}
<p>
{{ form.label }}
{{ form }}
</p>
{% endfor %}
#注意事项
forms组件只负责渲染获取用户数据的标签
前端的校验是十分不可靠的(可被随意修改) 可以校验一些简单的数据
'''使用关键字 novalidate可以取消前端的校验 '''
<form action='' novalidate>
fomrs组件展示信息
后端不同请求返回的froms对象一定要是相同的变量名
def ab_forms_func(request):
# 产生一个空对象
form_obj = MyForm()
if request_method == 'POST'
form_obj = MyForm(request.POST)
if form_obj.is_valid(): # 校验数据是否合法
print(form_obj.cleaned_data) # 获取数据中合法的预感
else:
print(form_obj.errors) # 校验数据是否合法
# 2.将该对象传递给html文件
return reder(request,'formPage.html',locals())
'''
将错误传入到前端
{{ form.label }}
{{ form }}
<span>{{ form.errors.0 }}</span>
'''
# 针对错误信息怎么修改
# 方式一:自定义内容
给字段对象添加参数:errors_messages参数
username = forms.CharField(min_length=3, max_length=8, label='用户名', error_messages={
'min_length':'用户最少输入三个字符',
'max_length':'用户最少输入八个字符',
'required':'用户名不可为空'
})
'''使用自定义错误内容要取消前端的校验(novalidata)'''
# 方式二:修改系统语言环境
from django.conf import global_settings
'''django内部真正的配置文件'''
forms组件校验补充
forms组件针对字段数据的校验 提供了三种类型的校验方式(可一起使用)
第一种类型:直接写参数 max_length
第二种类型:使用正则表达式 validators
第三种类型:钩子函数 编写代码自定义校验规则
eg:
class MyFoem(forms.Form):
username = forms.CharField(min_length=3,max_length=6)
password = forms.CharField(min_length=3,max_length=6)
pwd_s = forms.CharField(min_length=3,max_length=6)
# 钩子函数>>>:校验的最后一环 是在所有字段校验之后触发
# 局部钩子:每次之校验一个字段数据
'''运用场景: 校验用户名是否已存在'''
def clean_username(self):
username = self.cleaned_data.get('username')
if username == 'xiaochen':
self.add_error('username','用户名已存在')
return username
# 全局钩子:一次可以校验多个字段类型
'''运用场景: 校验两次密码是否一致'''
def clean(self):
password = self.cleaned_data.get('password')
confirm_pwd= self.cleaned_data.get('pwd_s')
if not password == confirm_pwd:
self.add_error('pwd_s','两次密码不一致')
return self.cleaned_data
forms组件参数补充
字段名称 | 作用 |
---|---|
min_length/max_length | 最短字符个数/最长字符个数 |
min_value/max_value | 最小值/最大值 |
label | 字段注释(头头) |
error_messages | 自定义错误提示 |
validators | 正则校验器 |
initial | 默认值 |
required | 是否必填(自定义没有填提示) |
widget | 控制标签的各项属性 |
widget
#控制标签的各项属性
widget=forms.widgets.PasswordInput(attrs={'class':'form-control'})
'''将需要给标签添加的属性以键值对的形式传入'''
modelform组件
"""
我们学习校验性组件的目的 绝大部分是为了数据录入数据库之前的各项审核
forms组件使用的时候需要对照模型类编写代码 不够方便
"""
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.一定在配置文件中注册中间件才可以生效
标签:obj,form,中间件,校验,django,forms
From: https://www.cnblogs.com/xiaochenxiangchangpang/p/16997401.html