Django中Form的基本使用
from django import forms
from django.forms import fields
class UserInfo(forms.Form):
username = fields.CharField(required=True,error_messages={
'required':'username不能为空'
}) # 正则表达式
password = fields.CharField(required=True,error_messages={
'required':'password不能为空'
})
email = fields.EmailField(required=True,error_messages={
'required':'email不能为空',
'invalid':'email格式错误'
}) #不能为空
# 获取用户提交的数据 request.POST
# 数据和正则表达式进行验证
# 1.是否验证成功
# 2.成功:获取数据
# 3.失败:显示错误信息
def add_user(request):
if request.method == 'GET':
return render(request,'add_user.html')
else:
obj = UserInfo(request.POST) # 定义一个form实例
# 获取是否验证成功 使用is_valid方法
if obj.is_valid():
print('验证通过',obj.cleaned_data)
models.UserInfo.objects.create(**obj.cleaned_data)
else:
print('错误信息',obj.errors)
总结:
Form验证:
a.Form类
b. obj = Form()
obj.username <input .../>
c. obj = Form(request.POST)
obj.username <input value=..../>
d. 验证
if obj.is_valid()
print('数据信息',obj.cleaned_data)
models.UserInfo.objects.create(**obj.cleaned_data)
else:
print('错误信息',obj.errors)
print('错误信息',obj.errors.usernaem[0])
return render(request,'add_user/',{'obj':obj})
===============>
Form 生成HTML标签
在index中添加 {{ obj.usernaem }} 自动生成html标签
from django.forms import widgets
widget=widgets.TextInput(attr={'class':'xxxx'}) #设置标签类型
Form 编辑
#============urls.py================
from app01 import views
urlpatterns = [
url(r'edit_user/(?P<uid>\d+)',views.edit_user),
]
#============views.py================
from django import forms
from django.forms import fields
from django.forms import widgets
class UserForm(forms.Form):
username = fields.CharField(
required=True,
error_messages = {'required':'username不能为空'},
widget = widgets.TextInput(attrs={'class':'form-control','placeholder':'用户名'}),
)
password = fields.CharField(
required = True,
error_messages = {'required':'password不能为空'},
widget = widgets.TextInput(attrs={'class':'form-control','placeholder':'密码'}),
)
email = fields.CharField(
required = True,
error_messages = {'required':'email不能为空'},
widget = widgets.TextInput(attrs={'class':'form-control','placeholder':'邮件'}),
)
from app01 import models
def edit_user(request,uid):
if request.method == 'GET':
user_obj = models.UserInfo.objects.filter(id=uid).first()
obj = UserForm(initial={'username':user_obj.username,'password':user_obj.password,'email':user_obj.email})
#或者
# user = models.UserInfo.objects.values('username','password','email').filter(id=uid).first()
# obj = UserForm(initial=user)
return render(request,'edit_user.html',{'obj':obj,'uid':uid})
elif request.method == 'POST':
obj = UserForm(request.POST)
if obj.is_valid():
models.UserInfo.objects.filter(id=uid).update(**obj.cleaned_data)
return redirect('/index1/')
else:
return render(request,'edit_user.html',{'obj':obj,'uid':uid})
Form中的select下拉框:
ut_id = fields.IntegerField(
required=True,
widget = widgets.Select(
attrs = {'class':'form-control'},
choices = [],
)
)
def __init__(self,*args,**kwargs)
super(UserForm,self).__init__(*args,**kwargs)
self.fields['ut_id'].widget.choices = models.UserType.values_list('id','usertype')
Form 小结:
1. 做提交数据的验证
2. 生成对应的HTML
3.
跨表操作时的数据库性能
select_related('Forkey')
最新文章
- wordpress-4.4.1 数据库表结构解析
- 详解DHV:怎么具体展示高价值
- 如何在Hadoop的MapReduce程序中处理JSON文件
- Java笔记(二十四)&hellip;&hellip;集合工具类Collections&;Arrays
- 调试postgresql9.5.2最新源码
- Android doGet方法
- Callable 获取线程返回值
- Repeated Substring Pattern Leetcode
- centos 7(Linux) 下yum安装mysql
- storybook配置之基本配置和webpack配置
- Python之多进程&;异步并行
- __str__ 和 __repr
- leetcode1005
- IOC创建对象的几种方式
- 分治算法--寻找第k大数
- Dictionary GetOrAdd
- HDU 3974 Assign the task(dfs时间戳+线段树成段更新)
- 使用自定义验证组件库扩展 Windows 窗体
- Django 1.5.4 专题二 urls 和 view 提高
- APSC4xSeries_Ver32.exe在win764位提示缺少DLL错误解决办法
热门文章
- Scala 快速入门
- 解决java.lang.NoSuchMethodError:org.joda.time.DateTime.withTimeAtStartOfDay() Lorg/joda/time/DateTime
- jQuery 写的textarea输入字数限制
- appiun滑动的简单封装
- Python扩展模块——调用WindowsAPI(pywin32的简单使用)
- 帧动画的创建方式 - 纯Java代码方式
- Spring AOP AspectJ
- Easyui Datagrid 修改显示行号列宽度
- spring-boot 使用Aop通知打印控制器请求报文和返回报文
- transform-style为什么子元素需要定位?