普通 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 组件基本用法的更多相关文章

  1. Python - Django - form 组件内置的正则校验器

    app01/models.py: from django.db import models class UserInfo(models.Model): username = models.CharFi ...

  2. Python - Django - form 组件动态从数据库取 choices 数据

    app01/models.py: from django.db import models class UserInfo(models.Model): username = models.CharFi ...

  3. Python - Django - form 组件自定义校验

    reg2.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  4. Python - Django - form 组件校验功能

    app01/models.py: from django.db import models class UserInfo(models.Model): username = models.CharFi ...

  5. Python - Django - form 组件常用的字段和字段参数

    邮箱: views.py: from django import forms from django.forms import widgets class RegForm(forms.Form): e ...

  6. 9.24 Django Form组件

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

  7. 6月28日 Django form组件 和 modelform组件

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

  8. django Form组件

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

  9. Django—Form组件

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

随机推荐

  1. php图片防盗链

    利用.htaccess 重写规则防止图片被盗链 2. 找到httpd.conf 打开重写规则 3.

  2. 猿族崛起-Alpha版本发布2

    标准开头 Q A 这个作业属于哪个课程 课程链接 这个作业要求在哪里 要求 团队名称 猿族崛起 这个作业的目标 完成alpha版本未完成的功能,并进行拓展 Sname Sno 向宏力 20173106 ...

  3. 石子归并(区间dp 模板)

    区间dp入门 #include<iostream> #include<cstdio> #include <cctype> #include<algorithm ...

  4. Tensorflow简单实践系列(一):安装和运行

    TensorFlow 是谷歌开发的机器学习框架. 安装 TensorFlow 直接使用 pip 安装即可,添加豆瓣镜像可以加快速度: pip install tensorflow -i https:/ ...

  5. Zabbix导入MySQL数据库报错ERROR 1046 (3D000) at line 1: No database selected

    使用如下命令导入Zabbix数据库时报错 解决办法: 1.先把原始的数据库压缩包备份 cd /usr/share/doc/zabbix-server-mysql-4.0.7/ cp create.sq ...

  6. 在vue项目中使用自己封装的ajax

    在 src 目录下新建 vue.extend.js ,内容如下: export default { install(Vue) { Vue.prototype.$http=function(option ...

  7. HDU - 3644:A Chocolate Manufacturer's Problem(模拟退火, 求多边形内最大圆半径)

    pro:给定一个N边形,然后给半径为R的圆,问是否可以放进去.  问题转化为多边形的最大内接圆半径.(N<50): sol:乍一看,不就是二分+半平面交验证是否有核的板子题吗. 然而事情并没有那 ...

  8. js中四舍五入保留两位效数,js中将Number转换成字符类型

    今天在写代码的时候遇到了点问题,特意记下,以免忘记!四舍五入方法: // num为传入的值,n为保留的小数位 function fomatFloat(num,n){ var f = parseFloa ...

  9. window对象方法(alert-confirm-prompt)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 手写队列以及stl中队列的使用

    一,手写队列. struct queue { ; ,rear=,a[maxn]; void push(int x) { a[++rear]=x; } void pop() { first++; } i ...