python自动开发之第二十四天(Django)
一、ModelForm操作及验证
1、class Meta:class Meta:
#注意以下字段不能加逗号
model = models.UserInfo
#这里的all代指所用的字段,也可以是一个列表,里面是model中的字段
fields = '__all__'
# fields = ['username','user_type']
#exclude排除某一字段
# exclude = ['user_type']
#提示信息labels
labels = {
'username': '用户名',
'email':'邮箱',
'user_type':'用户类型'
}
#提示信息
help_texts = {
'username':'请输入用户名'
}
#自定义插件
widgets = {
'username':Fwidgets.Textarea(attrs={'class':'c1'})
}
#自定义错误信息
error_messages = {
#整体错误信息
'__all__':'...',
#每个字段错误信息
'username':{
'required':'用户名不能为空',
},
'email':{
'required':'邮箱不能为空',
'invalid':'邮箱格式不正确',
},
}
#字段正则表达式的修改
field_classes = {
#这里用的form的字段,只能填类
'email':Ffields.URLField
}
#字段本地化,注意settings里要做相应的配置
# localized_fields = ('ctime',)
如:
数据库中
2016
-
12
-
27
04
:
10
:
57
setting中的配置
TIME_ZONE
=
'Asia/Shanghai'
USE_TZ
=
True
则显示:
2016
-
12
-
27
12
:
10
:
57
2、ModelForm验证
ModelForm-->BaseModelForm-->BaseForm(is_valid,errors等方法)
3、添加数据
def index(request):
if request.method == 'GET':
obj = UserInfoModelForm()
return render(request,'index.html',{'obj':obj})
elif request.method == 'POST':
obj = UserInfoModelForm(request.POST)
#添加数据
# models.UserInfo.objects.create(**obj.cleaned_data)
#更新数据
# models.UserInfo.objects.filter().update(**obj.cleaned_data)
#自动添加数据
if obj.is_valid():
obj.save()
#obj.save()可以拆分成以下3个部分
instance = obj.save(False)
#只会保存当前这个类,而不会添加m2m
instance.save()
#保存m2m
obj.save_m2m
二、Ajax请求
1、原生ajax
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="text"/>
<input type="button" value="Ajax1" onclick="Ajax1();" /> <script type="text/javascript" src="/static/jquery-1.12.4.js"></script>
<script>
//优化原生ajax请求,做到不同浏览器的兼容
function getXHR(){
var xhr = null;
if(XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
return xhr; } function Ajax1(){
var xhr = getXHR();
//var xhr = new XMLHttpRequest();
xhr.open('POST', '/ajax_json/',true);
xhr.onreadystatechange = function(){ if(xhr.readyState == 4){
// 这里的数值等于4,表示数据接收完毕
//获取返回值
var obj = JSON.parse(xhr.responseText);
console.log(obj);
}
};
{# xhr.setRequestHeader('k1','v1');#}
//加上请求头,后台需要解析才能接收到数据
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset-UTF-8');
xhr.send("name=root;pwd=123");
} </script>
</body>
</html>
ajax.html
def ajax(request):
return render(request, 'ajax.html') def ajax_json(request):
import time
# time.sleep(3)
print(request.POST)
ret = {'code': True, 'data': request.POST.get('username')}
import json
return HttpResponse(json.dumps(ret))
views
2、jquery的ajax
$.ajax()
3、伪ajax(基于iframe标签)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--
<input type="text" id="url" />
<input type="button" value="发送Iframe请求" onclick="iframeRequest();" />
<iframe id="ifm" src="http://www.baidu.com"></iframe>
-->
<form action="/ajax_json/" method="POST" target="ifm1">
<iframe id="ifm1" name="ifm1" ></iframe>
<input type="text" name="username" />
<input type="text" name="email" />
<input type="submit" onclick="sumitForm();" value="Form提交"/>
</form> <script type="text/javascript" src="/static/jquery-1.12.4.js"></script>
<script>
/*
function iframeRequest() {
var url = $('#url').val();
$('#ifm').attr('src',url);
}
*/
</script>
</body>
</html>
伪ajax
4、使用时机
如果发送的是【普通数据】 -> 使用顺序 jQuery,原生(XMLHttpRequest),iframe
python自动开发之第二十四天(Django)的更多相关文章
- python自动开发之第二十五天
一.组合搜索 参考: http://www.cnblogs.com/ccorz/p/5985205.html 二.JSONP 1.在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据的,但 ...
- python自动开发之第二十三天(Django)
一.一大波model操作 1. 创建数据库表 # 单表 # app01_user ==> tb1 # users class User(models.Model): name = models. ...
- Python之路【第二十四篇】:Python学习路径及练手项目合集
Python学习路径及练手项目合集 Wayne Shi· 2 个月前 参照:https://zhuanlan.zhihu.com/p/23561159 更多文章欢迎关注专栏:学习编程. 本系列Py ...
- 【Python之路】第二十二篇--Django【基础篇】
1 Django流程介绍 MTV模式 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业 ...
- Python之路【第二十四篇】Python算法排序一
什么是算法 1.什么是算法 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出.简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果. ...
- python自动开发之第二十二天
知识点概要 - Session - CSRF - Model操作 - Form验证(ModelForm) - 中间件 - 缓存 - 信号 一. Session 基于Cookie做用户验证时:敏感信息不 ...
- 【Python之路】第二十四篇--爬虫
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕 ...
- Python之路【第二十四篇】:数据库索引
数据库索引 一.索引简介 索引在mysql中也叫做"键",是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈 ...
- Python开发【第二十二篇】:Web框架之Django【进阶】
Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...
随机推荐
- TCP/IP协议与OSI协议
OSI协议是一个理想化的协议,它把网络传输过程分为七层模型,以达到形象化的理解的效果,在实际应用中没有被使用.TCP/IP协议可以看作是它的简化版,是目前应用最广泛的网络协议,许多协议都是以它为基础而 ...
- Matlab 函数ndims简介,flipdim简介
ndims是matlab中求一个数组维数的函数. 调用格式: n=ndims(A) 将A的维数返回给变量n.n>=2 n=ndims(A)与n=length(size(A))是等价的 MATLA ...
- iOS-学习UIKIt框架的重要性
前言: 众所周知,我们的移动设备的屏幕上可以展示很多图形界面,作为用户的我们可以通过屏幕上的图形界面浏览信息,也可以通过与图形界面的简单交互,在移动设备上实现各种各样的功能操作.....可以说,没 ...
- 事件驱动与异步IO--待更新
论事件驱动与异步IO 通常,我们写服务器处理模型的程序时,有以下几种模型: (1)每收到一个请求,创建一个新的进程,来处理该请求: (2)每收到一个请求,创建一个新的线程,来处理该请求: (3)每收到 ...
- Oracle数据库中心双活之道:ASM vs VPLEX
Oracle数据库中心双活之道:ASM vs VPLEX 来源 https://www.cnblogs.com/wenjiewang/p/7460212.html 双活方案对比:ASM vs V-PL ...
- hadoop 使用Avro排序
在上例中,使用Avro框架求出数据的最大值,本例使用Avro对数据排序,输入依然是之前的样本,输出使用文本(也可以输出Avro格式). 1.在Avro的Schema中直接设置排序方向. dataRec ...
- hadoop 使用map将SequenFile里的小文件解压出来
上例中将HDFS里小文件通过mapper压缩到一个文件中,本例将这些小文件解压出来. mapreduce可以按SequenceFile的key进行分片. 1.mapper public class M ...
- 2017 ICPC beijing F - Secret Poems
#1632 : Secret Poems 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 The Yongzheng Emperor (13 December 1678 – ...
- UVA.11464 Even Parity (思维题 开关问题)
UVA.11464 Even Parity (思维题 开关问题) 题目大意 给出一个n*n的01方格,现在要求将其中的一些0转换为1,使得每个方格的上下左右格子的数字和为偶数(如果存在的话),求使得最 ...
- Unity3D开发七惑
使用Unity3D开发也有大半年了,心中存惑如下,愿与各位开发者一起探讨: (1) 远离普适编程之惑 随着游戏引擎的不断发展,游戏程序员的开发层级也越来越高,以unity3d尤为突出.如果是进行We ...