Django之form表单
https://www.cnblogs.com/liwenzhou/p/8747872.html
1. form组件的介绍
之前web开发的模式,以注册为例:
1. 要有一个注册的页面,页面里面要有form表单 --> 生成HTML代码
2. form表单要能提交数据到后端,后端要做有效性校验 --> 数据有效性校验
3. 要把校验的提示信息展示在页面上 --> 校验信息返回并展示,保存原来填写的内容
关于校验:
1. 前端通过JS代码做校验 --> 最好有
2. 后端做校验 --> 必须要有(因为前端的校验可以被跳过)
2. form组件的用法
1. from django import forms
2, 定义一个form类
class RegForm(forms.Form):
user = forms.CharField()
pwd = forms.CharField()
email = forms.EmailField()
生成HTML:
3. 实例化一个form对象, 传递到模板语言中
4. 在目标语言中调用form对象的响应方法和属性
三种方式:
1. {{ form_obj.as_p }}
2. 单独写
{{ form_obj.pwd.label }}
{{ form_obj.pwd }}
做校验:
1. form_obj = RegForm(request.POST)
2. form_obj.is_valid()
内置的正则校验器的使用
mobile = forms.CharField(
label="手机",
# 自己定制校验规则
validators=[
RegexValidator(r'^[0-9]+$', '手机号必须是数字'),
RegexValidator(r'^1[3-9][0-9]{9}$', '手机格式有误')
],
widget=widgets.TextInput(attrs={"class": "form-control"}),
error_messages={
"required": "该字段不能为空",
}
)
重写__init__方法,动态获取数据库数据:
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.fields["......"].widgets.choice = models.xxxx.objects.all().value_list(xxx)
form表单验证流程
1、正则表达式验证
2、clean_name()方法
3、clean()方法验证
整体验证方法(验证两次密码是否一致):
from django import forms
from django.forms import fields
from django.core.exceptions import ValidationError,NON_FIELD_ERRORS
class Test(forms.Form):
password = fields.CharField(
label="密码",
min_length=6,
max_length=32,
required=True,
error_messages={
"required":"不能为空",
"min_length":"最少为6位",
"max_length":"最长为32位"
}
)
re_pwd = fields.CharField(
label="确认密码",
min_length=6,
max_length=32,
required=True,
error_messages={
"required": "不能为空",
"min_length": "最少为6位",
"max_length": "最长为32位"
}
)
def clean(self):
try:
v1 = self.cleaned_data["password"]
v2 = self.cleaned_data["re_pwd"]
except:
return
if v1 == v2:
pass
else:
raise ValidationError("密码不一致")
def test(request):
if request.method == "GET":
obj = Test()
return render(request,"test.html",locals())
else:
obj = Test(request.POST)
if obj.is_valid():
return HttpResponse("success")
else:
return render(request,"test.html",locals())
<form method="post" action="/personal_web/test" novalidate>
{% csrf_token %}
<div>{{ obj.password.label }}{{ obj.password }}{{ obj.password.errors.0 }}{{ obj.non_field_errors.0 }}</div>
<div>{{ obj.re_pwd.label }}{{ obj.re_pwd }}{{ obj.re_pwd.errors.0 }}{{ obj.non_field_errors.0 }}</div>
<div><input type="submit"></div>
</form>
四、ModelForm
class BookForm(forms.ModelForm):
class Meta:
model = models.Book
fields = "__all__" #还可以添加很多参数,如label、message_errors、widgits
def add(request):
if request.method == "POST":
form = BookForm(request.POST)
if form.is_valid():
form.save()
return ......
form = BookForm()
return .....
def edit(request):
obj = models.Book.objects.filter(pk=1),first()
if request.method == "POST":
form = BookForm(request.POST,instance=obj)
if form.is_valid():
form.save()
return ......
form = BookForm(instance=obj)
return .....
Django之form表单的更多相关文章
- Django的form表单
html的form表单 django中,前端如果要提交一些数据到views里面去,需要用到 html里面的form表单. 例如: # form2/urls.py from django.contrib ...
- Django 11 form表单(状态保持session、form表单及注册实现)
Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...
- 转载:Django之form表单
转载: 一.使用form类创建一个表单 先定义好一个RegForm类: forms.py from django import forms # 导入forms类 class NameForm(form ...
- Django--分页器(paginator)、Django的用户认证、Django的FORM表单
分页器(paginator) >>> from django.core.paginator import Paginator >>> objects = ['joh ...
- django之form表单验证
django中的Form一般有两种功能: 输入html 验证用户输入 #!/usr/bin/env python # -*- coding:utf- -*- import re from django ...
- django中form表单的提交:
一,关于表单: 表单在百度百科的解释: 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域 ...
- Day19 Django之Form表单验证、CSRF、Cookie、Session和Model操作
一.Form表单验证 用于做用户提交数据的验证1.自定义规则 a.自定义规则(类,字段名==html中的name值)b.数据提交-规则进行匹配代码如下: """day19 ...
- Django的form表单之文件上传
在生成input标签的时候可以指定input标签的类型为file类型 <!DOCTYPE html> <html lang="en"> <head&g ...
- 【django之form表单】
一.构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的模板: <form action="/your-name/" method=&qu ...
- Django 提交 form 表单(使用sqlite3保存数据)
优化 提交 form 表单,https://www.cnblogs.com/klvchen/p/10608143.html 创建数据库的字段,在 models.py 中添加 from django.d ...
随机推荐
- PHP中feof()函数的猜测
本文环境: OS:Mac OS X 10.8.4 PHP:5.3.15 PHP的官方手册中,函数feof()下面的讨论不少,对此做了一些相关的测试. <?php print <<&l ...
- Python--day03(变量、数据类型、运算符)
day02主要内容回顾 1.语言的分类 -- 机器语言:直接编写0,1指令,直接能被硬件执行 -- 汇编语言:编写助记符(与指令的对应关系),找到对应的指令直接交给硬件执行 -- 高级语言:编写人能识 ...
- Python Revisited Day 05(模块)
目录 5.1 模块与包 5.1.1 包 5.2 Python 标准库概览 5.2.1 字符串处理 io.StringIO 类 5.2.3 命令行设计 5.2.4 数学与数字 5.2.5 时间与日期 5 ...
- centOS中mysql一些常用操作
安装mysqlyum -y install mysql-server 修改mysql配置vi /etc/my.cnf 这里会有很多需要注意的配置项,后面会有专门的笔记暂时修改一下编码(添加在密码下 ...
- NOIP2002普及组复赛B 选数
题目链接:https://ac.nowcoder.com/acm/contest/230/B 题目大意: 略 分析: DFS模板题. 代码如下: #include <bits/stdc++.h& ...
- 洛谷P4016负载平衡
题目 负载平衡问题是一个比较经典的网络流问题,但是该问题还有一个数学贪心法. 所以做这个题前,其实可以做一下均分纸牌问题. 均分纸牌问题 均分纸牌问题可以说是作为贪心的入门题. 做法 首先我们应当把原 ...
- n98-magerun2.phar
installl: 1,cd /usr/local/bin && curl -O https://files.magerun.net/n98-magerun2.phar 2,chmod ...
- Magento2 Service contracts 服务合同
服务合同 Magento是一个模块化系统,它使第三方开发人员能够定制和覆盖其框架的核心部分.然而,这种灵活性是有代价的. 业务逻辑倾向于泄漏Magento系统的各个层,这表现为重复且不一致的代码. 商 ...
- CodeForces666E Forensic Examination
题目描述 给你一个串S以及一个字符串数组T[1..m],q次询问,每次问S的子串S[pl..pr]在T[l..r]中的哪个串里的出现次数最多,并输出出现次数. 如有多解输出最靠前的那一个. 题解 ...
- 20165223 《信息安全系统设计基础》 实现mybash
一.了解 mybash 1. 简介 bash 是 Bourne Again Shell 的缩写,是linux默认的标准shell(也是大家常说的系统内核),bash也是Unix/Linux上常见的 ...