Python - Django - form 组件基本用法
普通 form 表单的处理:
reg.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body> <form action="/reg/" method="post">
{% csrf_token %}
<p>用户名:
<input type="text" name="username">
<span>{{ error.user }}</span> {# 如果有错误,就获取错误信息 #}
</p>
<p>密码:
<input type="password" name="pwd">
<span>{{ error.pwd }}</span> {# 如果有错误,就获取错误信息 #}
</p>
<p>
<input type="submit">
</p>
</form> </body>
</html>
views.py:
from django.shortcuts import render, HttpResponse
from app01 import models def reg(request):
error = {"user": "", "pwd": ""} # 用一个字典来存错误信息
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("pwd") if len(username) > 5:
error["user"] = "用户名不能大于 5 位"
if len(password) < 6:
error["pwd"] = "密码不能小于 6 位"
elif len(password) > 10:
error["pwd"] = "密码不能大于 10 位" return render(request, "reg.html", {"error": error})
访问,http://127.0.0.1:8000/reg/
输入大于 5 位数的用户名和大于 10 位数的密码

使用 form 组件处理表单:
reg2.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body> <form action="/reg2/" method="post" novalidate>
{% csrf_token %}
{{ form_obj.as_p }} {# 以 p 标签形式显示 #}
{# {{ form_obj.errors.username }} {# 单独获取 username 的错误信息 #}
{# {{ form_obj.errors.password }} {# 单独获取 password 的错误信息 #}
<p><input type="submit"></p>
</form> </body>
</html>
form_obj 可以直接获取到 username、password 的错误信息,也可以通过 errors 来单独获取
views.py:
from django.shortcuts import render, HttpResponse
from app01 import models from django import forms # 导入 form 组件 # 定义一个 form 类
class RegForm(forms.Form):
username = forms.CharField(
min_length=5,
label="用户名", # 设置标签名
# 错误信息
error_messages={
"min_length": "用户名不能大于5位!",
}
)
password = forms.CharField(
min_length=6,
label="密码", # 设置标签名
# 错误信息
error_messages={
"min_length": "密码不能少于6位!",
}
) def reg2(request):
form_obj = RegForm() # GET 请求,实例化 form 对象 if request.method == "POST":
form_obj = RegForm(request.POST)
# form 帮我们做校验
if form_obj.is_valid(): # 判断 form_obj 是否有值
pass return render(request, "reg2.html", {"form_obj": form_obj})
访问,http://127.0.0.1:8000/reg2/

如果要把密码处的内容隐藏起来,要用到 widgets
views.py:
from django import forms
from django.forms import widgets class RegForm(forms.Form):
username = forms.CharField(
min_length=5,
label="用户名",
error_messages={
"min_length": "用户名不能大于5位!",
}
) password = forms.CharField(
min_length=6,
label="密码",
error_messages={
"min_length": "密码不能少于6位!",
},
widget=widgets.PasswordInput() # 把输入的密码隐藏起来
)
运行结果:

但是点击 “提交” 之后

密码的内容没有了
修改 views.py,在 PasswordInput 中添加参数:
from django import forms
from django.forms import widgets class RegForm(forms.Form):
username = forms.CharField(
min_length=5,
label="用户名",
error_messages={
"min_length": "用户名不能大于5位!",
}
) password = forms.CharField(
min_length=6,
label="密码",
error_messages={
"min_length": "密码不能少于6位!",
},
widget=widgets.PasswordInput(render_value=True)
)
运行结果:

Python - Django - form 组件基本用法的更多相关文章
- Python - Django - form 组件内置的正则校验器
app01/models.py: from django.db import models class UserInfo(models.Model): username = models.CharFi ...
- Python - Django - form 组件动态从数据库取 choices 数据
app01/models.py: from django.db import models class UserInfo(models.Model): username = models.CharFi ...
- Python - Django - form 组件自定义校验
reg2.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- Python - Django - form 组件校验功能
app01/models.py: from django.db import models class UserInfo(models.Model): username = models.CharFi ...
- Python - Django - form 组件常用的字段和字段参数
邮箱: views.py: from django import forms from django.forms import widgets class RegForm(forms.Form): e ...
- 9.24 Django Form组件
2018-9-23 20:10:04 这两天优化了自己图书管理系统 github 连接:https://github.com/TrueNewBee/pythonDemo 顺便整理了博客,写了好多总结, ...
- 6月28日 Django form组件 和 modelform组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- django Form组件
django Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建 ...
- Django—Form组件
Django From简介 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比 ...
随机推荐
- 《TensorFlow2深度学习》学习笔记(四)对笔记二中的模型增加正确率展示
全部代码如下:(红色部分为与笔记二不同之处) #1.Import the neccessary libraries needed import numpy as np import tensorflo ...
- PAT甲级1003题解——Dijkstra
解题步骤: 1.初始化:设置mat[][]存放点之间的距离,vis[]存放点的选取情况,people[]存放初始时每个城市的人数,man[]存放到达每个城市的救援队的最多的人数,num[]存放到达每个 ...
- 常用conda命令【转载】
转载地址:https://haoyu.love/blog900.html 一直在用 Conda,很多东西记不住,每次都要查 Doc.那好,就写在这里做个备忘好了. 在 bash 里面自动加载 cond ...
- 51nod 1053 最大M子段和 V2
N个整数组成的序列a[1],a[2],a[3],…,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的.如果M >= N个数中正数的个数,那么输出所有正数的和. 例如:-2 ...
- UVA 13024: Saint John Festival(凸包+二分 ,判定多个点在凸包内)
题意:给定N个点,Q次询问,问当前点知否在N个点组成的凸包内. 思路:由于是凸包,我们可以利用二分求解. 二分思路1:求得上凸包和下凸包,那么两次二分,如果点在对应上凸包的下面,对应下凸包的上面,那么 ...
- nginx设置反向代理,获取真实客户端ip
upstream这个模块提供一个简单方法来实现在轮询和客户端IP之间的后端服务器负荷平衡. upstream abc.com { server 127.0.0.1:8080; server 127.0 ...
- ES6函数的个人总结
默认参数: 1. 在 ES5 语法中,为函数形参指定默认值的写法: 写法一: function foo (bar) { bar = bar || 'abc'; console.log(bar) } f ...
- [HTML5] Using HTMLPortalElement to improve MPA preformance
For multi pages application, it is very slow to navgiate between page by page, because it needs to r ...
- Cramer-Rao Bounds (CRB)
克拉美-罗界.又称Cramer-Rao lower bounds(CRLB),克拉美-罗下界. 克拉美罗界是对于参数估计问题提出的,为任何无偏估计量的方差确定了一个下限.无偏估计量的方差只能无限制的逼 ...
- 集成omnibus-ctl+ chef 制作一个可配置的软件包
前边有写过使用omnibus-ctl 制作软件包的,但是当时没有集成chef,只有一个空壳子,实际上omnibus-ctl 已经内置 了对于chef 的操作(但是我们还需要在添加一个依赖),以下简单说 ...