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:572、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 博客园 首页 ...
随机推荐
- Android基础------SQLite数据库(一)
1.SQLite介绍 SQLite是一款非常流行的嵌入式数据库,它支持SQL操作,并且只用很少的内存. Android在运行时集成了SQLite,所有每个Android应用程序都可以使用SQLLite ...
- Android 多屏幕适配 dp和px的关系 最好用dp
Android 多屏幕适配 dp和px的关系 一直以来别人经常问我,android的多屏幕适配到底是怎么弄,我也不知道如何讲解清楚,或许自己也是挺迷糊. 以下得出的结论主要是结合官方文档进行分析的ht ...
- KMP算法字符串查找子串
题目: 经典的KMP算法 分析: 和KMP算法对应的是BF算法,其中BF算法时间复杂度,最坏情况下可以达到O(n*m),而KMP算法的时间复杂度是O(n + m),所以,KMP算法效率高很多. 但是K ...
- BZOJ 1597 土地购买(斜率优化DP)
如果有一块土地的长和宽都小于另一块土地的长和宽,显然这块土地属于“赠送土地”. 我们可以排序一下将这些赠送土地全部忽略掉,一定不会影响到答案. 那么剩下的土地就是长递减,宽递增的.令dp[i]表示购买 ...
- POJ2135:Farm Tour——题解
http://poj.org/problem?id=2135 题目大意: 从1到n再回来,每条边只能走一次,问最短路. —————————————————— 如果不告诉我是费用流打死不会想这个…… 我 ...
- BZOJ1008:[HNOI2008]越狱——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1008 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中 ...
- MySQL基础原创笔记(一)
对表的增删改操作: 创建表: create table student ( id int primary key auto_increment, name ...
- Numpy模块(数值计算)
Numpy是高性能科学计算和数据分析的基础包.它是pandas等其他各种工具的基础. NumPy的主要功能: ndarray,一个多维数组结构,高效且节省空间 无需循环对整组数据进行快速运算的数学函数 ...
- jq的$.each遍历数组
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用JavaScript OOP特性搭建Web应用
最近,我面试了一个有五年 Web 应用程序开发经验的软件开发人员.四年半来她一直在从事 JavaScript 相关的工作,她自认为 JavaScript 技能非常好,但在不久之后我就发现实际上她对 J ...