Django基础之form表单
1. form介绍
我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。
与此同时, 我们在好多场景下都需要对用户的输入做校验, 比如校验用户是否输入, 输入的长度和格式等正不正确. 如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息。
django form组件就实现了上面所述的功能,总结一下, 其实form组件的主要功能如下:
- 生成页面可用的HTML标签
- 对用户提交的数据进行校验
- 保留上次输入内容
2. 普通方式手写注册功能
<!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="name">
</p>
<p>
密码:
<input type="password" name="pwd">
</p>
<p>
<input type="submit" value="注册">
<p style="color: red">{{ error_msg }}</p>
</p>
</form>
</body>
</html>
login.html
# 注册
def register(request):
error_msg = ""
if request.method == "POST":
username = request.POST.get("name")
password = reqeust.POST.get("password")
# 对注册信息做校验
if len(username) < 6:
# 用户长度小于6
error_msg = "用户名长度不能小于6位"
else:
# 将用户名和密码存在数据库
return HttpResponse("注册成功")
return render(request, "register.html", {"error_msg": error_msg})
views.py
3. 使用form组件实现注册功能
先定义好一个RegForm类:
from django import forms # 按照django form组件的要求自己写一个类
class RegForm(forms.Form):
username = forms.CharField(label = "用户名")
password = forms.CharField(label = "密码")
再写一个视图函数:
# 使用form组件实现注册方式
def register(request):
form_obj = RegForm()
if request.method == "POST":
# 实例化form对象的时候,把post提交过来的数据直接传进去
form_obj = RegForm(request.POST)
# 调用form_obj校验数据的方法
if form_obj.is_valid():
return HttpResponse("注册成功")
return render(request, "register.html", {"form_obj": form_obj})
再写前端登录页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<form action="/register/" method = "POST" novalidate autocomplete = "off">
{% csrf_token %}
<div>
<label for="{{ form_obj.username.id_for_label }}">
{{ form_obj.usernaeme.label }}
</label>
{{form_obj.username}}
{{form_obj.username.errors.0}}
</div>
<div>
<label for="{{form_obj.password.id_for_label}}">
{{ form_obj.password.label }}
</label>
{{ form_obj.password }}
{{ form_obj.password.errors.0 }}
</div>
<div>
<input type="submit" value="注册">
</div>
</form>
</body>
</html>
login.html
看网页效果发现也验证了form的功能:
- 前端页面时form类的对象生成的 --->生成HTML标签功能
- 当用户名和密码输入为空或者输入错误之后,页面都会有提示 -->用户提交校验功能
- 当用户输错之后, 再次输入上次的内容还保留在Input框 --->保留上次输入内容
4. form常用字段与插件
创建form类时, 主要涉及到"字段"和"插件", 字段用于对用户请求数据数据的验证, 插件用于自动生成HTML。
4.1 initial
初始值, input框里面的初始值:
class LoginForm(forms.Form):
username = forms.CharField(
min_length=8,
label="用户名",
initial="张三" # 设置默认值
)
password = forms.CharField(min_length=6, label="密码")
4.2 error_messages
重写错误信息
class LoginForm(forms.Form):
username = forms.CharField(
min_length=8,
label="用户名",
initial="张三",
error_messages={
"requered": "不能为空",
"invalid": "格式错误",
"min_length": "用户名最短为8位"
}
)
password = forms.CharField(min_length=6, label="密码")
4.3 password
class LoginForm(forms.Form):
...
password = forms.CharField(
min_length=6,
label="密码",
widget=forms.widgets.PasswordInput(
attrs={"class": "c1"},
render_value=True
)
)
4.4 radioSelect
单radio值为字符串
class LoginForm(forms.Form):
username = forms.CharField(
min_length = 8,
label = "用户名",
initial = "张三",
error_messages = {
"required": "不能为空",
"invalid": "格式错误",
"min_length": "用户名最短8位"
}
) password = forms.CharField(min_length=6, label="密码")
gender = forms.fields.ChoiceField(
choices = ((1, "男"), (2, "女"), (3, "不详")),
label = "性别",
initial = 3,
widget = forms.widgets.RadioSelect()
)
4.5 单选select
class LoginForm(forms.Form):
...
hobby = forms.fields.ChoiceField(
choices = ((1, "篮球"), (2, "足球"), (3, "双色球")),
label = "爱好",
initial = 3,
widget = forms.widgets.Select()
)
4.6 多选select
class LoginForm(forms.Form):
...
hobby = forms.fields.MultipleChoiceField(
choices = ((1, "篮球"), (2, "足球"), (3, "双色球")),
label = "爱好:",
initial = [1, 3],
widget = forms.widgets.SelectMultiple()
)
4.7 多选checkbox
class LoginForm(forms.Form):
...
hobby = forms.fields.MultipleChoiceField(
choices = ((1, "篮球"), (2, "足球"), (3, "双色球")),
label = "爱好",
initial = [1, 3],
widget = forms.widgets.CheckboxSelectMultiple()
)
关于choice的注意事项:
在使用选择标签时, 需要注意choices的选项可以从数据库中获取, 但是由于是静态字段, 获取的值无法实时更新, 需要自定义构造方法从而达到此目的。
方法一:
from django.forms import Form
from django.forms import widgets
from django.forms import fields class MyForm(Form):
user = fields.ChoiceField(
initial = 2,
widget = widgets.Select
) def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **Kwargs)
self.fields["user"].choices = models.Classes.object.all().value_list("id", "caption")
方法一:
from django import forms
from django.forms import fields
from django.forms import models as form_model class FInfo(forms.Form):
# 多选
authors = form_model.ModelMultipleChoiceField(queryset=models.NNewType.objects.all()) # 单选
authors = form_model.ModelChoiceField(queryset=models.NNewType.objects.all())
Django基础之form表单的更多相关文章
- Django基础之Form表单验证
Form表单验证 1.创建Form类(本质就是正则表达式的集合) from django.forms import Form from django.forms import fields from ...
- Django基础之form表单的补充进阶
1. 应用Bootstrap样式 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- Django组件之Form表单
一.Django中的Form表单介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入 ...
- 第三百一十一节,Django框架,Form表单验证
第三百一十一节,Django框架,Form表单验证 表单提交 html <!DOCTYPE html> <html lang="en"> <head& ...
- Django框架 之 Form表单和Ajax上传文件
Django框架 之 Form表单和Ajax上传文件 浏览目录 Form表单上传文件 Ajax上传文件 伪造Ajax上传文件 Form表单上传文件 html 1 2 3 4 5 6 7 <h3& ...
- [php基础]PHP Form表单验证:PHP form validator使用说明
在PHP网站开发建设中,用户注册.留言是必不可少的功能,用户提交的信息数据都是通过Form表单提交,为了保证数据的完整性.安全性,PHP Form表单验证是过滤数据的首要环节,PHP对表单提交数据的验 ...
- Django中的Form表单
Django中已经定义好了form类,可以很容易的使用Django生成一个表单. 一.利用Django生成一个表单: 1.在应用下创建一个forms文件,用于存放form表单.然后在forms中实例华 ...
- Django中的Form表单验证
回忆一下Form表单验证的逻辑: 前端有若干个input输入框,将用户输入内容,以字典传递给后端. 后端预先存在一个Form表单验证的基类,封装了一个检测用户输入是否全部通过的方法.该方法会先定义好错 ...
- Django 中的Form表单认证
一.Form表单 1.1 Form的几个功能 验证用户数据(显示错误信息) 初始化页面显示内容 HTML Form提交保留上次提交数据 生成HTML标签 1.2 创建表单类Form 1. 创建 ...
随机推荐
- win10下搭建vue开发环境
特别说明:下面任何命令都是在windows的命令行工具下进行输入,打开命令行工具的快捷方式如下图: 详细的安装步骤如下: 一.安装node.js 说明:安装node.js的windows版本后 ...
- Css解决表格超出部分用省略号显示
小伙伴们有没有的遇到页面显示时,因为数据太长导致显示的表格某一列过长,从而导致页面的不美观,下面我们来看一看如何用Css样式解决表格超出部分用省略号显示的问题. 主要设置两个样式: table{ ta ...
- 使用NPOI导出Excel文件
使用NPOI导出Excel文件,本实例使用了ASP.NET MVC. 1.使用NPOI导出Excel文件 实例:导出商品列表. 要求:1.通过NPOI导出导出商品列表信息: 2.使用Excel函数计算 ...
- C#动态生成Word文档并填充数据
C#也能动态生成Word文档并填充数据 http://www.cnblogs.com/qyfan82/archive/2007/09/14/893293.html 引用http://blog.csdn ...
- centos7 firewall指定IP与端口、端段访问(常用)
https://blog.csdn.net/yipianfuyunsm/article/details/99998332 https://www.cnblogs.com/co10rway/p/8268 ...
- echo打印换行
shell环境中,echo是常用的数据命令,但有的时候,想通过“\n”使输出换行却换不了,这个时候需要增加-e选项: $ echo "Hellow.\nHey man~" Hell ...
- Vmvare 虚拟机固定IP
首先我们打开虚拟机的虚拟网络编辑器,打开vmvare菜单栏的编辑,选择虚拟网络编辑器. 在打开的网络虚拟器中,会看到相关信息,虚拟机网络类型采用的NAT模式,子网地址是192.168.89.0,虚 ...
- IntelliJ IDEA安装及破解
百度搜索IntelliJ IDEA,进入官网. 下载完成后进入安装界面 根据自己的情况选择安装路径 等待下载和安装完成. 安装完成 接下来我们运行IntelliJ IDEA 之后这里就要我们进行激活了 ...
- cnblogs排版样式预览
说明:关于本博主题及样式来源于[GitHub]:本博总体排版目录样式风格参照博文[修仙成神之路]进行预览:参照本博设置可参考博文[设置跟本博一样的效果]本博之前发表过的博文存在样式不协调,后期会逐一完 ...
- Linux系统从新手到运维老鸟学习指南
Linux是在1990年底到1991年由芬兰大学的学生LinusTorvalds利用Minix操作系统作为开发平台编写了内核,目前由世界各地的爱好者共同开发和维护的与UNIX兼容的操作系统,也是自由和 ...