使用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=" ...
随机推荐
- php的error_log()记录日志
<?php date_default_timezone_set('PRC');//设置时区,否则会有警告 //把This s a error保存到/home/log-yyyy-MM-dd.txt ...
- NoSQL数据库--简介
一.What's NoSQL? NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库.这类数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的.原始的目的是为了大规模we ...
- java面试④数据库部分
2.3.1 数据库的分类及常用的数据库 数据库分为:关系型数据库和非关系型数据库 关系数据库:mysql,oracle,sqlServer 非关系型:redis,mongoDB 2.3.2 简单介绍一 ...
- 我的Vue之小功能统计
摘要:项目中经常会要用到大大小小的功能,所以我在这里进行一个汇总,后面会持续添加至这篇博客,希望当你遇到这个功能时,我的博客能够对你有帮助,(上一篇博客说要在收假后写一篇博客做一个年终总结,想了半天不 ...
- Docker中“TERM environment variable not set.”问题
在使用top查容器内部资源利用情况时候,发现无法使用,报“TERM environment variable not set.”错误.从网上找到了解决方案,经实验有效 root@103b5f05462 ...
- springcloud-断路器hystrix
Netflix的创造了一个调用的库 Hystrix 实现了断路器.在微服务架构中,通常有多层服务调用. 底层服务出现故障可能导致用户级联故障.当调用特定服务达到一定阈值时(Hystrix中的默认值为5 ...
- js oop中的三种继承方法
JS OOP 中的三种继承方法: 很多读者关于js opp的继承比较模糊,本文总结了oop中的三种继承方法,以助于读者进行区分. <继承使用一个子类继承另一个父类,子类可以自动拥有父类的属性和方 ...
- [android] 手机卫士来电显示号码归属地
继续N天前的项目 开启服务监听手机来电,查询数据库,显示归属地 详细内容可以参考这篇博文:http://www.cnblogs.com/taoshihan/p/5331232.html Address ...
- 深复制与浅复制&&strong,copy修饰符总结
又是一个老生常谈的话题,可是貌似这个问题,好多ios开发工程师并不能理解透彻,所以简单记录分析一下深复制与浅复制的原理以及strong,copy修饰符的原理和使用. 一.深复制与浅复制 ...
- 线程池ThreadPoolExecutor使用原理
本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片.视频等原文的内容) 若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cn ...