使用ModelForm表单验证
1.定义model.py
model中定义的字段类型,只有在通过form进行验证的时候才有效,数据库中的字段类型与其并不完全一致,如数据库中并没有ipaddress类型。如果不通过form对字段进行验证,则用户可以在前端输入任何类型数据而不会出错。
from django.db import models
class hv(models.Model):
name=models.CharField(max_length=100,unique=True,primary_key=True)
ip=models.GenericIPAddressField()
def __str__(self):
return self.name
2.定义froms.py
ModelForm将model和前台form连接到了一起
forms.Form并未连接后端的model,只是用来对前台输入进行判断其是否合法
from django import forms from django.forms import ModelForm
from aptest.models import hv,vm,test #导入需要使用的model class hvform(ModelForm):
class Meta:
model = hv
fields = ['name','ip']
#fields = '__all__' #选择使用所有字段
#exclude = ['title'] #不适用某个字段
class vmform(ModelForm):
cpu=forms.CharField(max_length=5,error_messages={'required': 'Please enter your name'}) #重新对cpu字段进行格式限制,会覆盖Model中已定义的类型格式。自定义错误信息,需要知道具体错误的名称 如“requeired”这些名称可以在API 中找到 class Meta:
model = vm
fields = '__all__'
3.编辑views.py
def add(request):
if request.method == 'POST':
#print request.POST['hvname'],request.POST['hvip']
print request.method
form = hvform(request.POST) if form.is_valid(): #判断输入数据是否合法
#print form
#print form.cleaned_data['name'],form.cleaned_data['ip']
fc = form.cleaned_data
print fc['name'],fc['ip']
else:
err.append(form.errors) #输出错误信息
else:
form = hvform()
context={'hour_offset':hour_offset,'ls':ls,'err':err}
return render(request,'aptest/form.html',context)
4.编辑模板form.html
<!DOCTYPE html>
<html>
<head>
<title>ADD</title>
<link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css">
<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://apps.bdimg.com/libs/bootstrap/3.3.0/js/bootstrap.min.js"></script>
</head>
<body> <form class="form-horizontal" role="form" action="" method="post">
{% csrf_token %}
<!-- {{form.as_table}} --> <!--如果使用该方式,则在view中需要对form通过context渲染到模板,否则打开该页面看不到输入框-->
<div class="form-group">
<label for="name1" class="col-sm-2 control-label">name</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="name1" name="name" value="{{form.name}}"> <!--此处value必须要定义,form不能被渲染到模板中。form.name为view中的 form=hvform(request.POST),不定义value,post的数据后台form无法接收到。name= 需要和value中的form.后面的名称相同 -->
</div>
</div>
<div class="form-group">
<label for="ip" class="col-sm-2 control-label">ip</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="ip" name="ip" value="{{form.ip}}">
</div>
</div> <div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">ADD</button>
</div>
</div>
</form> {% if err %}
<p style="color: red;">
Please correct the error: {{ err }} below.
</p>
{% endif %} </body>
</html>
访问输出:

在模版中通过{{form.as_table}} 方式显示form内容时,Django会自动的将外键字段转化成一个select的控件,并且通过下拉框来选择一个值,如下图:
context={'err':err,'form':form}
return render(request,'aptest/current_datetime.html',context)

使用ModelForm表单验证的更多相关文章
- Django ModelForm表单验证
ModelForm 在使用Model和Form时,都需要对字段进行定义并指定类型,通过ModelForm则可以省去From中字段的定义 应用场景:定制model admin 的时候可以使用.适用于小业 ...
- 关于Django中的表单验证
ModelForm 和 普通的Form 都可以做表单验证 对于ModelForm如果只是想验证其中一部分model中的field,可以指定:内部类Meta的fields元素: fields = ('x ...
- 第二十二章 Django会话与表单验证
第二十二章 Django会话与表单验证 第一课 模板回顾 1.基本操作 def func(req): return render(req,'index.html',{'val':[1,2,3...]} ...
- Django学习笔记之表单验证
表单概述 HTML中的表单 单纯从前端的html来说,表单是用来提交数据给服务器的,不管后台的服务器用的是Django还是PHP语言还是其他语言.只要把input标签放在form标签中,然后再添加一个 ...
- python自动化之djangoform表单验证
djangoforms表单验证 创建个类,继承于 forms.form obj = FM(request.post) obj.is_valid() 如果验证没有问题会返回true,否则会返回false ...
- 第三百一十一节,Django框架,Form表单验证
第三百一十一节,Django框架,Form表单验证 表单提交 html <!DOCTYPE html> <html lang="en"> <head& ...
- django 表单验证和字段验证
表单验证和字段验证 表单验证发生在数据验证之后.如果你需要自定义这个过程,有几个不同的地方可以修改,每个地方的目的不一样.表单处理过程中要运行三种类别的验证方法.它们通常在你调用表单的is_valid ...
- 17.Django表单验证
Django提供了3中方式来验证表单 官网文档:https://docs.djangoproject.com/en/1.9/ref/validators 1.表单字段验证器 a.引入:from dja ...
- 九 Django框架,Form表单验证
表单提交 html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
随机推荐
- linux下c的网络编程---转载
1.tcp协议
- Kaggle(一):房价预测
Kaggle(一) 房价预测 (随机森林.岭回归.集成学习) 项目介绍:通过79个解释变量描述爱荷华州艾姆斯的住宅的各个方面,然后通过这些变量训练模型, 来预测房价. kaggle项目链接:ht ...
- CUBA 7 新特性 (下篇)
上篇我们主要介绍了 CUBA 7 中前端的一些主要功能.这篇我们介绍一下中间件的一变化和新特性. 中间件功能 前面关于新的界面 API 的描述内容比我预期的要多许多,所以在这一节,我会尽量简单点说! ...
- jquery操作字符串常用方法总结及工作代码
1.javascript数组用法 方法 描述 FF IE concat() 连接两个或更多的数组,并返回结果. 1 4 join() 把数组的所有元素放入一个字符串.元素通过指定的分隔符进行分隔. 1 ...
- 2Java基础语法
1.标识符 1.1 标识符以字母.下划线.美元符开头 1.2 标识符由字母.下划线.美元符或数字组成 1.3 标识符区分大小写 1.4 不能与Java关键字同名 ...
- 使用pd从数据库逆向生成pdm文件
使用pd从数据库逆向生成pdm文件 好久没更新博客了,最近忙着各种事,捞了点老本行java的一些东西,浑浑噩噩,花了几天时间用java搭建了一个小项目的restful接口,深深觉得这东西论效率被nod ...
- 面向对象(基础oop)之垃圾回收与静态成员
大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...
- 悟空模式-java-普通工厂模式
[大圣看玩多时,问土地道:“此树有多少株数?”土地道:“有三千六百株.前面一千二百株,花微果小,三千年一熟,人吃了成仙了道,体健身轻.中间一千二百株,层花甘实,六千年一熟,人吃了霞举飞升,长生不老.后 ...
- EF 调用oracle 存储过程
EF是如何调用的存储过程的,本人也是翻遍了个大网站,查阅了很多资料.终于解决了遇到的问题. 第一步:创建存储过程,在这里我就不多说了,不是文章说的重点. declare O_VOUCHER_ACT_D ...
- 大数据平台的技术演化之路 诸葛io平台设计实例
如今,数据分析能力正逐渐成为企业发展的标配,企业通过数据分析的过程将数据中的信息提取出来,进行处理.识别.加工.呈现,最后成为指导企业业务发展的知识和智慧.而处理.识别.加工.呈现的过程从本质上来讲, ...