码迷,mamicode.com
首页 > 其他好文 > 详细

django 5 form1

时间:2017-09-12 12:06:23      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:删除   init   保留   方法   验证   登录   choice   ipa   request   

---------------------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

标签:删除   init   保留   方法   验证   登录   choice   ipa   request   

原文地址:http://www.cnblogs.com/onda/p/7509172.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!