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的主要内容,如果未能解决你的问题,请参考以下文章

python---补充django中文报错,Django3.5出错

Django基础Django入门

Django+Nginx+Uwsgi 上线部署

Django学习第5篇:Django之ORM数据库操作

Django学习第5篇:Django之ORM数据库操作

将 django 升级到 1.6.5 后,django 对象不是 JSON 可序列化错误