目录

  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包括了所有的插件

25)django-form使用的更多相关文章

  1. Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)

    一.Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session 1 2 3 4 5 ...

  2. django: form fileupload - 1

    本节介绍 Form 中一些字段类型的使用,以文件上传字段 FileField 为例:(注,其它字段和相关用法见官方文档中的 Forms -> Built-in Fields) 一,配置 urls ...

  3. django form表单验证

    一. django form表单验证引入 有时时候我们需要使用get,post,put等方式在前台HTML页面提交一些数据到后台处理例 ; <!DOCTYPE html> <html ...

  4. Django form模块使用心得

    最近用Django 写了一个网站,现在来分享一下对Django form 的一些心得. 一,创建一个表单 创建一个Form表单有两种方式: 第一种方式是继承于forms.Form,的一个子类,通过在f ...

  5. Python Web框架篇:Django Form组件

    Form简介 在HTTP中,表单(form标签),是用来提交数据的,其action属性说明了其传输数据的方法:如何传.如何接收. 访问网站时,表单可以实现客户端与服务器之间的通信.例如查询,就用到了表 ...

  6. 25.django Model

    django ORM基本配置 django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表 1.修改project数据库配置 (1)settigs.py里面 默认 DAT ...

  7. Django form表单

    Form介绍 之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入, ...

  8. django Form组件

    django Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建 ...

  9. Django Form和ModelForm组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  10. 9.24 Django Form组件

    2018-9-23 20:10:04 这两天优化了自己图书管理系统 github 连接:https://github.com/TrueNewBee/pythonDemo 顺便整理了博客,写了好多总结, ...

随机推荐

  1. Linux 字符编码 查看与转换

    Linux 查看文件编码格式 Vim 查看文件编码 set fileencoding // 即可显示文件编码格式 若想解决Vim查看文件乱码问题, 可以在 .vimrc 文件添加 set encodi ...

  2. docker 小技巧 列出所有容器的IP地址

    命令如下: [root@localhost ~]# docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{ ...

  3. 控制结构(7): 程序计数器(PC)

    // 上一篇:最近最少使用(LRU) // 下一篇:线性化(linearization) 程序的每一行都是一个状态,对应的行指令.同步的情况下同一个pc一直自增,异步的时候,分裂出一个新的子pc,独立 ...

  4. React项目搭建与部署

    React项目搭建与部署 一,介绍与需求 1.1,介绍 1.1.1,React简介 React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React ...

  5. Git各个状态之间转换指令总结

    基本状态标识 A- = untracked 未跟踪 A = tracked 已跟踪未修改 A+ = modified - 已修改未暂存 B = staged - 已暂存未提交 C = committe ...

  6. php curl报错:417 - Expectation Failed

    当我在post提交的数据增加一段内容后会报错:417 - Expectation Failed. 查资料发现在使用curl做POST时,当post的数据大于1024字节时,curl并不会直接发起pos ...

  7. [BZOJ 4516] [SDOI 2016] 生成魔咒

    Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例 ...

  8. Codeforces Round #551 (Div. 2) 题解

    CF1153A 直接做啊,分类讨论即可 #include<iostream> #include<string.h> #include<string> #includ ...

  9. centos2.6.18升级到2.6.39

    本来想升级到最新版本4.6的,但是不成功,即使3.4也不成功,暂且先升级到2.x最新版本. 步骤如下: 一 下载源码 https://www.kernel.org/pub/linux/kernel/ ...

  10. markdown笔记实现页内目录跳转

    方法一 使用Markdown的语法来增加跳转链接:[名称](#id). 1. 只要()内 #号 后面的内容和锚点处标签内的id对应即可,可以任意使用标签支持html语法 2. id不可以有括号和空格, ...