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

最新文章

  1. wordpress-4.4.1 数据库表结构解析
  2. 详解DHV:怎么具体展示高价值
  3. 如何在Hadoop的MapReduce程序中处理JSON文件
  4. Java笔记(二十四)&hellip;&hellip;集合工具类Collections&amp;Arrays
  5. 调试postgresql9.5.2最新源码
  6. Android doGet方法
  7. Callable 获取线程返回值
  8. Repeated Substring Pattern Leetcode
  9. centos 7(Linux) 下yum安装mysql
  10. storybook配置之基本配置和webpack配置
  11. Python之多进程&amp;异步并行
  12. __str__ 和 __repr
  13. leetcode1005
  14. IOC创建对象的几种方式
  15. 分治算法--寻找第k大数
  16. Dictionary GetOrAdd
  17. HDU 3974 Assign the task(dfs时间戳+线段树成段更新)
  18. 使用自定义验证组件库扩展 Windows 窗体
  19. Django 1.5.4 专题二 urls 和 view 提高
  20. APSC4xSeries_Ver32.exe在win764位提示缺少DLL错误解决办法

热门文章

  1. Scala 快速入门
  2. 解决java.lang.NoSuchMethodError:org.joda.time.DateTime.withTimeAtStartOfDay() Lorg/joda/time/DateTime
  3. jQuery 写的textarea输入字数限制
  4. appiun滑动的简单封装
  5. Python扩展模块——调用WindowsAPI(pywin32的简单使用)
  6. 帧动画的创建方式 - 纯Java代码方式
  7. Spring AOP AspectJ
  8. Easyui Datagrid 修改显示行号列宽度
  9. spring-boot 使用Aop通知打印控制器请求报文和返回报文
  10. transform-style为什么子元素需要定位?