目录

  1)django form作用

  2)django form使用

 

一:django form 作用

  django form有两个作用:一是用户输入数据验证;二是生成html

  1)用户输入数据验证,比如用户输入的用户名密码,不能为空,邮件格式验证等。如果自己写正则写很复杂。可以使用django form实现验证

  2)通过django form生成html表单

二:django form使用

  1)form常用方法 

    #表单使用
    obj=FM(request.POST) #把POST信息提交给表单验证
r1=obj.is_valid() #让他去验证,并返回值,有没有验证成功。成功返回True,不成功返回False
print(obj.cleaned_data)#验证成功的信息obj.cleaned_data里面
print(obj.errors)#验证错误的信息obj.errors里面(列表ul)
print(obj.errors.as_json()) 返回是字典

  2) form使用简单示例

#创建
from django import forms
class FM(forms.Form) from django import forms
class FM(forms.Form):
user=forms.CharField()
pwd=forms.CharField()
email=forms.EmailField()
#假如用户提交了很多数据过来,我怎么知道是那一个是我们需要验证的。
这里的user和form表单里的name值是一致的。即定义的字段和form表单里的name属性的值必须要一致 <form action="/fm/" method="post">
{% csrf_token %}
<input type="text" name="user">
<input type="password" name="pwd">
<input type="text" name="email">
<input type="submit" value="提交">
</form> #表单使用 obj=FM(request.POST) #把POST信息提交给表单验证
r1=obj.is_valid() #让他去验证,并返回值,有没有验证成功。成功返回True,不成功返回False
print(obj.cleaned_data)#验证成功的信息obj.cleaned_data里面
print(obj.errors)#验证错误的信息obj.errors里面(列表ul)
print(obj.errors.as_json()) 返回是字典
示例: def fm(request):
if request.method=="GET":
return render(request,'fm.html')
if request.method=="POST":
#获取用户所有数据
#每条数据请求的验证
#成功:获取所有正确的信息
#失败:显示错误信息
obj=FM(request.POST) #把POST信息提交给表单验证
r1=obj.is_valid() #让他去验证,并返回值,有没有验证成功。成功返回True,不成功返回False
print(r1)
if r1:
print(obj.cleaned_data)#验证成功的信息obj.cleaned_data里面
else:
print(obj.errors)#验证错误的信息obj.errors里面
return redirect("/index/") 结果:
False
<ul class="errorlist"><li>user<ul class="errorlist"><li>This field is required.</li></ul></li><li>pwd<ul class="errorlist"><li>This field is required.</li></ul></li><li>email<ul class="errorlist"><li>This field is required.</li></ul></li></ul> True
{'user': 'root', 'pwd': '`12', 'email': '123@126.com'} {"user": [{"message": "This field is required.", "code": "required"}], "pwd": [{"message": "This field is required.", "code": "required"}], "email": [{"message": "This field is required.", "code": "required"}]}

  3)上面错误都是英文,能不能定制。  

    #2)上面错误都是英文,能不能定制。
from django import forms
class FM(forms.Form):
#我只关心我关心的
user=forms.CharField(error_messages={'required':'用户名不能为空'})
pwd=forms.CharField(max_length=12,
min_length=6,
error_messages={'min_length':'密码长度不能小于6','max_length':'密码长度不能大于12','required':'密码不能为空'})
email=forms.EmailField(error_messages={'required':'邮箱不能为空','invalid':'邮箱格式错误'})
#假如用户提交了很多数据过来,我怎么知道是那一个是我们需要验证的。这里的user和form表单里的name值是一致的。

  4)错误信息传递给模板

    def fm(request):
if request.method=="GET":
return render(request,'fm.html')
if request.method=="POST":
#获取用户所有数据
#每条数据请求的验证
#成功:获取所有正确的信息
#失败:显示错误信息
obj=FM(request.POST) #把POST信息提交给表单验证
r1=obj.is_valid() #让他去验证,并返回值,有没有验证成功。成功返回True,不成功返回False
print(r1)
if r1:
print(obj.cleaned_data)#验证成功的信息obj.cleaned_data里面
else:
#obj.errors 继承了ErrirDict,是个字典obj.errors.user 会出错。正确写法:obj.errors["user"]
print(obj.errors)#验证错误的信息obj.errors里面
# print(obj.errors["user"][0])#拿到第一个错误信息
#把错误信息传递到模板
return render(request,'fm.html',{"obj":obj}) return render(request,'fm.html') fm.html <form action="/fm/" method="post">
{% csrf_token %}
<p><input type="text" name="user">
{{ obj.errors.user.0 }}
</p>
<p>
<input type="password" name="pwd">
{{ obj.errors.pwd.0 }}
</p>
<p><input type="text" name="email">
{{ obj.errors.email.0 }}</p>
<input type="submit" value="提交">
</form>

  5)上面错误信息显示了,但是原来输入的值没有了。上面不仅显示错误信息,还可以输出标签 

    <form action="/fm/" method="post">
{% csrf_token %}
<p>{{ obj.user }}
{{ obj.errors.user.0 }}
</p>
<p>
{{ obj.pwd }}
{{ obj.errors.pwd.0 }}
</p>
<p>{{ obj.email }}
{{ obj.errors.email.0 }}</p>
<input type="submit" value="提交">
</form>
但是上面没有显示输入框,因为第一次请求是GET,没有返回对象
所以GET模式要创建对象,不需要传递参数,但是变量名和POST一样。 def fm(request):
if request.method=="GET":
obj=FM()
return render(request,'fm.html',{"obj":obj})
if request.method=="POST":
#获取用户所有数据
#每条数据请求的验证
#成功:获取所有正确的信息
#失败:显示错误信息
obj=FM(request.POST) #把POST信息提交给表单验证
r1=obj.is_valid() #让他去验证,并返回值,有没有验证成功。成功返回True,不成功返回False
print(r1)
if r1:
print(obj.cleaned_data)#验证成功的信息obj.cleaned_data里面
else:
#obj.errors 继承了ErrirDict,是个字典obj.errors.user 会出错。正确写法:obj.errors["user"]
print(obj.errors)#验证错误的信息obj.errors里面
# print(obj.errors["user"][0])#拿到第一个错误信息
#把错误信息传递到模板
return render(request,'fm.html',{"obj":obj}) return render(request,'fm.html') #注意浏览器可能会自己加些东西显示。

  6)上面如果值如果正确。那就可以入库了

    #5)上面如果值如果正确。那就可以入库了
models.UserInfo.objects.create(**obj.cleaned_data) def fm(request):
if request.method=="GET":
obj=FM()
return render(request,'fm.html',{"obj":obj})
if request.method=="POST":
#获取用户所有数据
#每条数据请求的验证
#成功:获取所有正确的信息
#失败:显示错误信息
obj=FM(request.POST) #把POST信息提交给表单验证
r1=obj.is_valid() #让他去验证,并返回值,有没有验证成功。成功返回True,不成功返回False
print(r1)
if r1:
print(obj.cleaned_data)#验证成功的信息obj.cleaned_data里面
models.UserInfo.objects.create(**obj.cleaned_data)
return redirect("/index")
else:
#obj.errors 继承了ErrirDict,是个字典obj.errors.user 会出错。正确写法:obj.errors["user"]
print(obj.errors)#验证错误的信息obj.errors里面
# print(obj.errors["user"][0])#拿到第一个错误信息
#把错误信息传递到模板
return render(request,'fm.html',{"obj":obj})

  7)快速生成ul,p,table的form 页面

    1)验证用户请求
2)生成HTML(保留上一次输入的数据)
上面还支持另外种方式,但是还是建议使用上面,定制方便。 <body>
<form action="/fm/" method="post">
{% csrf_token %}
{{ obj.as_p }} #p标签方式显示
<input type="submit" value="提交">
</form> <form action="/fm/" method="post">
{% csrf_token %}
{{ obj.as_ul }} #显示列表
<input type="submit" value="提交">
</form> <form action="/fm/" method="post">
{% csrf_token %}
{{ obj.as_table }} #显示表格
<input type="submit" value="提交">
</form>
</body>

  8)怎么设置样式

#form字段
XXXField()字段本身只做验证
设置样式是inputext用插件widgets
user=forms.CharField(error_messages={'required':'用户名不能为空'},widget=widgets.Textarea(attrs={"class":"c1"})) from django import forms
from django.forms import widgets,fields
class FM(forms.Form):
#我只关心我关心的
user=fields.CharField(error_messages={'required':'用户名不能为空'},widget=widgets.Textarea(attrs={"class":"c1"}))
pwd=fields.CharField(max_length=12,
min_length=6,
error_messages={'min_length':'密码长度不能小于6','max_length':'密码长度不能大于12','required':'密码不能为空'})
email=forms.EmailField(error_messages={'required':'邮箱不能为空','invalid':'邮箱格式错误'})
#假如用户提交了很多数据过来,我怎么知道是那一个是我们需要验证的。这里的user和form表单里的name值是一致的。 fields包括了所有的XXField,推荐使用这种写法。
widgets包括了所有的插件

最新文章

  1. gcc编译器用法(自学总结)
  2. couldn&#39;t find setter for xxxxx
  3. node模块系统常用命令
  4. jQuery.cookie.js插件了解及使用方法
  5. SlipHover,能感知鼠标方向的图片遮罩效果jQuery插件
  6. CentOS出错You don&#39;t have permission to access on this server
  7. Leetcode Combination Sum II
  8. 帝国CMS内容模板IF判断
  9. iOS 7定制UIPageControl遇到的问题
  10. 高级四则运算器—结对项目反思(193 &amp; 105)
  11. 通用权限管理系统接口文档V4.2 版本之消息接口介绍
  12. TestNG扩展
  13. 获取DOM元素位置和尺寸大小
  14. 哞哞快的 C# 高斯模糊实现
  15. Latex 的Table使用multirow and multicolumn
  16. javaWeb学习总结(10)- Filter(过滤器)学习(2)
  17. 凸包GiftWrapping GrahamScan 算法实现
  18. pandas.DataFrame学习系列1——定义及属性
  19. 最简单的基于DirectShow的示例:视频播放器自定义版
  20. Net Core Docker 容器部署,修改,保存

热门文章

  1. bzoj 4260: Codechef REBXOR (01 Trie)
  2. 爬虫,基于request,bs4 的简单实例整合
  3. Luogu P3600 随机数生成器(期望+dp)
  4. Redis系列八:redis主从复制和哨兵
  5. Mybatis的应用1 Mybatis和logback的应用配置
  6. phpcms 标题设置
  7. NodeJS跨域问题
  8. 金融量化分析【day110】:金融基础知识
  9. JAVA IO练习
  10. [物理学与PDEs]第3章习题5 一维理想磁流体力学方程组的数学结构