from django.shortcuts import render,HttpResponse
from django import forms
from app01 import models
from django.core.validators import RegexValidator
import re
from django.core.exceptions import ValidationError # Create your views here. #自定义校验函数,直接在字段validators中使用
def name_valid(value):
name_re=re.compile(r'^[a-zA-Z_]+$')
if not name_re.match(value):
raise ValidationError("只能以字母下划线开头!") class Myform(forms.Form): name = forms.CharField(
# required=True, # 默认为True
label='用户名',
min_length=2,
max_length=6,
initial='abc', # 默认值
help_text='长度为2到6个字符!', # 帮助信息
error_messages=[{ # 自定义错误提示信息(默认为英文)
'required': '不能为空!',
'min_length': '不能少于2个字符!'
}],
validators=[RegexValidator(r'^(\w)+$','用户名只能有字母数字下划线组成!'), name_valid], # 自定义校验规则(列表中放自定义函数名,或者引入django内置的RegexValidator校验器)
# disabled=True#默认为True显示 ) # 密文
password = forms.CharField(
widget=forms.TextInput(attrs={'type': 'password'}),
)
# 日期
birth = forms.DateField(
widget=forms.TextInput(attrs={'type': 'date'})
)
# 单选
sex = forms.ChoiceField(
choices=[('', '男 '), ('', '女')],
# widget=forms.Select()#下拉单选(默认)
# widget=forms.RadioSelect()#正常单选 # widget = forms.CheckboxInput()#记住账号密码(label='记住账号密码',initial='checked',choices=[('True',1),('False',0)])
)
#单选:通过orm显示数据
publish = forms.ModelChoiceField(
queryset=models.Publish.objects.all() # 只能用all结果才能正常显示,必须设置__str__,否则拿到是对象
# widget和ChoiceFiled一样设置
) # 多选
hobby = forms.MultipleChoiceField( choices=[('', 'wan '), ('', 'ee')],
# widget=forms.SelectMultiple()#下拉多选(默认)
# widget=forms.CheckboxSelectMultiple()#正常多选
)
#多选:通过orm显示数据
author = forms.ModelMultipleChoiceField(
queryset=models.Author.objects.all() # 只能用all结果才能正常显示,必须设置__str__,否则拿到是对象
# widget和MultipleChoiceField一样设置
) def __init__(self,*args,**kwargs):#初始化对字段进行样式设置
super().__init__(*args,**kwargs)
for filed in self.fields:
self.fields[filed].widget.attrs.update({'class':'form-control'}) def form(request):
if request.method=='GET':
form_obj=Myform()
return render(request, 'form.html', {'form_obj':form_obj})
else:
form_obj=Myform(request.POST)#对提交的数据进行组件类实例化
if form_obj.is_valid():#校验提交的数据对象(字段校验-->validators校验(RegexValidator模块或者自定义函数)-->局部钩子-->全局钩子)
print(form_obj.cleaned_data)#form_obj.clean_data已经校验完的所有值
return HttpResponse('ok')
else:
return render(request,'form.html',{'form_obj':form_obj})#检测到错误,刷新页面,保留原数据

Django之form表单常用字段与插件的更多相关文章

  1. Django之form表单组件

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

  2. 转载:Django之form表单

    转载: 一.使用form类创建一个表单 先定义好一个RegForm类: forms.py from django import forms # 导入forms类 class NameForm(form ...

  3. Django专题-form表单

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

  4. Django的form表单

    html的form表单 django中,前端如果要提交一些数据到views里面去,需要用到 html里面的form表单. 例如: # form2/urls.py from django.contrib ...

  5. Django 11 form表单(状态保持session、form表单及注册实现)

    Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...

  6. Django--分页器(paginator)、Django的用户认证、Django的FORM表单

    分页器(paginator) >>> from django.core.paginator import Paginator >>> objects = ['joh ...

  7. html/form表单常用属性认识

    1.form表单常用属性练习 <style> .form1 { margin: auto; height: 900px; width: 500px; text-align: center; ...

  8. django中form表单的提交:

    一,关于表单: 表单在百度百科的解释:   表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域 ...

  9. Django 之 form表单

    Django中的Form表单 1.背景 平时我们在书写form表单时,经常都是手动的去写一些input标签,让用户输入一些功能,进行一些校验的判断,等等.Django中的form表单就能够帮我们去实现 ...

随机推荐

  1. 20199308《Linux内核原理与分析》第十二周作业

    一.实验简介 竞态条件是指多个线程同时访问或者操作同一块数据,运行的结果依赖于不同线程访问数据的顺序.如果一个拥有root权限的程序存在竞态条件漏洞的话,攻击者可以通过运行一个平行线程与漏洞程序竞争, ...

  2. Libra教程之:Transaction的生命周期

    文章目录 Transaction的生命周期 提交一个Transaction 交易入链的详细过程 接收Transaction 和其他Validators共享这个Transaction 区块Proposi ...

  3. Spring Boot Starters介绍

    文章目录 Web Start Test Starter Data JPA Starter Mail Starter 结论 对于任何一个复杂项目来说,依赖关系都是一个非常需要注意和消息的方面,虽然重要, ...

  4. 谷歌提高Google Assistant中Voice Match的准确性

    谷歌正在提高 Google Assistant 中 Voice Match 的准确性,使其变得更加完善.谷歌表示一旦用户在 Google Assistant 中启用 Voice Match 功能,那么 ...

  5. 【集群实战】Rsync数据同步工具

    1. Rsync介绍 1.1 什么是Rsync? Rsync是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于unix/linux/windows ...

  6. 狄慧201771010104《面向对象程序设计(java)》第十六周学习总结

    实验十六  线程技术 实验时间 2017-12-8 一.知识点总结: 1.程序与进程的概念 ‐程序是一段静态的代码,它是应用程序执行的蓝本. ‐进程是程序的一次动态执行,它对应了从代码加载.执行至执行 ...

  7. centos 7.0运行docker出现内核报错解决方法

    目前我这里docker是运行在centos 7.0系统里,使用1.5版本docker,最近一台服务器总是不定期死机,通过查看日志发现属于内核bug导致,报错信息如下 1 2 3 4 5 6 7 8 9 ...

  8. C++类学习(2)

    Ⅰ:类概念 一:类的构成 class 类名 { public: 公有数据成员和成员函数:类的接口 protected: 保护数据成员和成员函数: private: 私有数据成员和成员函数: }://注 ...

  9. 数据结构--链式栈--C++实现

    #include <iostream> using namespace std; template<class T>class Stack { private: struct ...

  10. 跟哥一起学Python(1) - python简介

    01—写在前面 我做了十几年的程序猿,码过代码.带过项目.做过产品经理.做过软件架构师.因为我是做通信设备软件的,面向底层操作系统,所以我的工作主要以C语言为主.Python在我的工作中通常用来写一些 ...