day 66 form组件、forms组件的钩子函数
forms组件
需求示例:获取用户输入 后端判断用户输入的内容是否合法,如果不合法前端渲染对应的错误信息
传统:
def register(request):
back_dic = {
'username': '', 'password': ""}
if request.method == 'POST':
username = request.POST.get('username')
pwd = request.POST.get('password')
if '666' in username:
res = "不能有666"
back_dic['username'] = res
if pwd == "123":
res = "密码太简单"
back_dic['password'] = res
return render(request, 'reg.html', locals())
html:
</head>
<body>
<form action="" method="post">
{% csrf_token %}
<p><input type="text" name="username">
<span>{
{ back_dic.username }}</span>
</p>
<p><input type="text" name="password">
<span>{
{ back_dic.password }}</span>
</p>
<input type="submit">
</form>
</body>
</html>
用forms组件来实现:校验数据、渲染页面、展示提示信息
一、校验数据、【前后端都可以校验数据,前端可以没有,但是后端一定要有】
1.校验数据,需要一个类,继承forms.Form
from django import forms
class Myform(forms.Form):
username = forms.CharField(max_length=8)
password = forms.CharField(max_length=6, min_length=3)
email = forms.EmailField()
2. 给forms组件传参数(字典的形式)
obj = views.Myform({‘username’: ‘egion’, ‘passowrod’: ‘123’})
3.查看数据校验结果
obj.is_valid()
4. 查看干净的数据
obj.cleaned_data ==> 正确的以字典形式放入{‘username’: ‘egondsb2’, ‘password’: ‘123’}
5. 查看不正确的数据
obj.errors ==> 错误的放入{‘password’: [‘Ensure this value has at least 3 characters (it has 2).’],
‘email’: [‘This field is required.’]}
from app01 import views
obj = views.Myform({
"username":"egondsb", "password": "123"})
obj.is_valid()
False
obj.cleaned_data
{
'password': '123'}
obj.errors
{
'username': ['Ensure this value has at most 6 characters (it has 7).'], 'email': ['This field is required.']}
ps: forms组件中所有的字段默认都是必填的(不能为空)
在数据都满足forms组件校验规则的情况下,多传的数据不作校验,
补充:正则校验数据
from django.core.validators import RegexValidator
phone = forms.CharField(validators=[RegexValidator(r'^[0-9]+$', '请输入数字'),
RegexValidator(r'^159[0-9]+$', '必须以159开头')])
RegexValidator验证器
from django.forms import Form
from django.forms import widgets
from django.forms import fields
from django.core.validators import RegexValidator
class MyForm(Form):
user = fields.CharField(
validators=[RegexValidator(r'^[0-9]+$', '请输入数字'), RegexValidator(r'^159[0-9]+$', '数字必须以159开头')],
)
自定义验证函数
二. 渲染页面、 forms组件只能帮你渲染 获取用户输入(输入框 、选择框 、下拉框 。。。) 提交按钮也得自己写
前端页面识别到是forms组件时,也会校验数据长度,
form表单取消前端校验的提示信息:
还没有评论,来说两句吧...