django 5 form1
Posted 昂达达
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 5 form1相关的知识,希望对你有一定的参考价值。
---------------------Form表单验证(用户请求验证+生成html标签)
示例:用户管理
a. 添加用户页面
- 显示HTML标签
- 提交:数据验证
- 成功之后保存
- 错误显示错误信息
1. 创建Form类(本质就是正则表达式的集合)
from django.forms import Form
from django.forms import fields
from django.forms import widgets
class MyForm (Form):
username = fields.CharField(
required=True,
error_messages={‘required‘:‘用户名不能为空‘},
widget=widgets.TextInput(attrs={‘class‘:‘form-control‘})
)
password = fields.CharField(
required=True,
error_messages={‘required‘: ‘邮箱不能为空‘,‘invalid‘:‘邮箱格式错误‘},
widget = widgets.TextInput(attrs={‘class‘: ‘form-control‘})
)
# fields.EmailField()
# fields.GenericIPAddressField(protocol=‘ipv4‘)
ut_id = fields.ChoiceField(
choices=[],
widget=widgets.Select(attrs={‘class‘:‘form-control‘})
)
role_id = fields.MultipleChoiceField(
choices=[],
widget=widgets.SelectMultiple(attrs={‘class‘:‘form-control‘})
)
创建自定义类,继承Form , 类属性 最好与数据库 列名相同:
error_messages:错误信息
widget:渲染方式
required:不为空
def __init__(self,*args,**kwargs):
super(UserForm,self).__init__(*args,**kwargs)
# self.fields已经有所有拷贝的字段
self.fields[‘ut_id‘].choices = models.UserType.objects.values_list(‘id‘,‘title‘)
self.fields[‘role_id‘].choices = models.Role.objects.values_list(‘id‘,‘caption‘)
如果需要读库的内容,则应该放入 类初始化方法中,不然数据库有更新,却更新不到页面,
因为类属性 只有在第一次生成的时候执行,而 初始化方法 在每次类被调用的时候都执行,能拿到第一手资料
2. 只是生成HTML标签: 添加页面
form = MyForm()
{{form.xx}}
3. 带默认值的HTML标签: 编辑页面
form = MyForm(initial={‘xx‘: xxx})
{{form.xx}}
4. 提交数据
form = MyForm(data=request.POST)
if form.is_valid():
print(form.cleaned_data)
else:
print(form.errors)
问题:下拉框数据无法实时更新
class UserForm(Form):
username = fields.CharField(
required=True,
error_messages={‘required‘:‘用户名不能为空‘}
)
password = fields.CharField(
required=True,
error_messages={‘required‘: ‘邮箱不能为空‘,‘invalid‘:‘邮箱格式错误‘}
)
ut_id = fields.ChoiceField(choices=[])
def __init__(self,*args,**kwargs):
super(UserForm,self).__init__(*args,**kwargs)
self.fields[‘ut_id‘].choices = models.UserType.objects.values_list(‘id‘,‘title‘)
示例:只用表单验证的功能(Ajax提交),注册&登录
定律:
【个数少,内容少】
页面摸态对话框:添加+删除+编辑 =》 ajax(无刷新) + Djaogo Form组件
- 验证
- 生成HTML(可用可不用,因为提交页面不刷新)
【适用于:数据个数多;博客】
新URL方式:添加+删除+编辑 =》 Form标签提交(页面刷新) + + Djaogo Form组件
- 验证
- 生成HTML(不用,无保留上次输入的内容)
个人推荐:
- 删除利用模态对话框,确认
- 添加+修改: 新URL方式
以上是关于django 5 form1的主要内容,如果未能解决你的问题,请参考以下文章