前言
在上一篇时,我们小试牛刀了以下Django Form组件的使用,一篇文章带你了解Django Form组件(入门篇),没来得及的小伙伴可以一起看看。但是你可能会有很多疑问,并不知道怎么使用。
并且知道Form组件的功能。
所以本篇就接着上次的继续,来一起学习以下Django Form组件如何使用。
Form组件的理解
没有使用Form组件时
在一般情况下,我们如果编写输入框时,在Html中,一般都是这样写的。
代码
- ...
- <form method="post" action="" novalidate>
- <div>
- <label>用户名:</label>
- <input type="text" name="uname">
- </div>
- <div>
- <label>密码:</label>
- <input type="text" name="upwd">
- </div>
- <div><input type="submit"></div>
- </form>
- ...
实现效果
使用Form组件时
在使用Form组件时,我们通常需要定义Form类。
这个Form,里面的字段,就可以理解为input标签,只不过是在后端写的。
Form类
- from django.forms import Form
- class LoginForm(Form):
- uname = fields.CharField(label="用户名")
- upwd = fields.CharField(label="密码")
views.py
- from django.shortcuts import render
- def login(request):
- form = LoginForm()
- return render(request, "login_f.html", {"form": form})
html
- ...
- <form method="post" action="" novalidate>
- <div>
- <label>{{ form.uname.label }}:</label>
- {{ form.uname }}
- <!--
- form.uname.errors.0 是为了展示填写不正确的错误信息
- errors.0是因为错误可能有多个
- 但是通常情况下,取第一个错误足够
- -->
- {{ form.uname.errors.0 }}
- </div>
- <div>
- <label>{{ form.upwd.label }}:</label>
- {{ form.upwd }}
- {{ form.upwd.errors.0 }}
- </div>
- <div><input type="submit"></div>
- </form>
- ...
小总结
可以发现,我并没有写input代码,而是直接调用后端的form.<字段名>出来的。
Form类生成的Html
可以发现,基本上和自己写的Html差不多,生成的id为id+<字段名>。
Form生成的Html和手动写Html对应图
通过对应图确定,通过后端的form.<字段>生成的直接就是input标签。
好了,到这,就确定了Form类,就是为我们生成input标签的。
Form使用
使用有以下步骤。
1.创建Form类,尽可能和models对上。
- class LoginForm(Form):
- uname = fields.CharField(label="用户名")
- upwd = fields.CharField(label="密码")
因为Form提交的数据,可以转换成dict,key就是Form字段名。
如果Form字段和models对上,直接models.<模型类>.objects.create(**dict)。
2.如果是GET请求,实例化Form对象,并且返回页面。
- def login(request):
- if request.method == 'GET':
- form = LoginForm()
- return render(request, "login_f.html", {"form": form})
3.如果是POST请求,实例化Form对象时,传入request.POST,request.FILES,并且验证。
- # 接着上面
- elif request.method == "POST":
- form = LoginForm(request.POST, request.FILES)
- ########### 验证数据
- if form.is_valid():
- # 验证成功
- # 验证成功之后的数据,key就是Form类的字段名
- print(form.cleaned_data) # {'uname': '1212', 'upwd': '1212'}
- return HttpResponse("ok")
- # 验证失败
- # 虽然返回的还是页面
- # 但是form会把上次输入框内容保存下来,并且还会展示errors信息
- return render(request, "login_f.html", {"form": form})
4.前端使用后端传过来的form对象。
方式一,点每个字段
方式二,循环form对象
form对象是可以循环的,循环的每个form对象就是每个字段对象。
新一轮科技变革与产业变革正在发生,数字化已经成为社会现代化建设的新趋势。2021...
高可用架构设计之无状态服务 笑谈架构设计 事故的发生是量的积累的结果,任何事...
操作场景 伸缩策略规定了触发伸缩活动的条件和执行的动作,当满足条件时,会触发...
现在有很多win7和win8系统用户想要升级 win10 系统,但是又不知道其系统会不会好...
webpack 学习笔记系列07-工作原理 Write By CS逍遥剑仙我的主页: csxiaoyao.com ...
生命周期管理简介 在2020年 阿里云文件存储通用型NAS 简称NAS 推出了新的低频介...
华特迪斯尼公司,通常被称为迪士尼,1923年起,华特迪士尼在公司破产后搬到好莱...
你了解云开发平台吗 阿里云云开发平台是面向开发者和中小企业打造的一站式、全云...
1. 接口描述 接口请求域名: cvm.tencentcloudapi.com 。 本接口 (DescribeHosts...
在坚实的基础上建立模型和分析 Image by XKCD 垃圾进垃圾出。 诞生于计算机科学...