Django进阶(路由系统、中间件、缓存、Cookie和Session、Ajax发送数据
路由系统
1、每个路由规则对应一个view中的函数
url(r'^index/(\d*)', views.index),
url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage),
url(r'^manage/(?P<name>\w*)', views.manage,{'id':333}),
2、根据app对路由规则进行一次分类
rl(r'^web/',include('web.urls')),
1、每个路由规则对应一个view中的函数
2、根据app对路由规则进行一次分类
django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。
在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件,如下图。
中间件中可以定义四个方法,分别是:
- process_request(self,request)
- process_view(self, request, callback, callback_args, callback_kwargs)
- process_exception(self, request, exception)
- process_response(self, request, response)
自定义中间件
1、创建中间件类
缓存
由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者Redis中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回,
1
2
3
4
5
6
7
8
9
10
|
CACHES = { 'default' : { 'BACKEND' : 'django.core.cache.backends.filebased.FileBasedCache' , 'LOCATION' : os.path.join(BASE_DIR, 'cache' ), 'TIMEOUT' : 600 , 'OPTIONS' : { 'MAX_ENTRIES' : 1000 } } } |
更多参考资料:
https://docs.djangoproject.com/en/1.9/topics/cache/
http://djangobook.py3k.cn/2.0/chapter15/
Cookie和Session
一、操作Cookie
获取cookie:request.COOKIES[key]
设置cookie:response.set_cookie(key,value)
由于cookie保存在客户端的电脑上,所以,jquery也可以操作cookie。
<script src='/static/js/jquery.cookie.js'></script>
$.cookie("list_pager_num", 30,{ path: '/' });
cookie保存时间
cookie默认在浏览器中保存 1209600秒,
设置cookie保存时间,在setting.py
SESSION_COOKIE_AGE = 10秒
关闭即失效
设置后,关闭浏览器,cookie即失效
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
二、操作Session
获取session:request.session[key]
设置session:reqeust.session[key] = value
删除session:del request[key]
request.session.set_expiry(value)
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。
#'django.middleware.csrf.CsrfViewMiddleware',
python manage.py makemigrations
<body>
<table border="1">
<thead>
<tr>
<th>主机</th><th>端口</th>
</tr>
</thead>
<tbody id="tb01">
<tr>
<td>10.0.0.1</td><td>22</td>
</tr>
</tbody>
</table>
<input type="button" onclick="AjaxSubmit();" value="Ajax提交">
<script src="/static/jquery-1.11.1.min.js"></script>
<script>
function AjaxSubmit(){
var host = '10.0.0.1' {#通过js获取表格中的数据#}
var port = '22'
$.ajax({
url:'/ajax_data/',
type:'POST',
data:{h:host,p:port},
success:function(arg){}
});
};
</script>
</body>
成功接收到ajax提交的数据
def index(request):
return render(request,'index.html') import json
def ajax_data(request):
ret = {'status':True,'error':''}
try:
print request.POST
except Exception,e: #异常处理
ret['status'] = False
ret['error'] = str(e)
return HttpResponse(json.dumps(ret))
#默认只能发送字符串,用json把字典转换成字符穿
<script>
function AjaxSubmit(){
var user_list = [
{'username':'yangmv','age':18},
{'username':'wj','age':28},
]
$.ajax({
url:'/ajax_data/',
type:'POST',
tradition:true, {#对数据原生处理,不做加工#}
data:{data:JSON.stringify(user_list)}, {#以字符串的方式#}
success:function(arg){
//json.loads
var callback_dict = $.parseJSON(arg); {#把返回的数据json.load成字典#}
if(callback_dict.status){
alert('成功');
}else{
alert(callback_dict.error);
}
}
});
};
</script>
成功获取到字典数据。并返回执行结果
<body>
<p>上传实例</p>
<form action="/upload/" method="POST" enctype="multipart/form-data">
<p><input type="file" name="f1" /></p>
<p><input type="text" name="hostname" /></p>
<input type="submit" value="提交" />
</form>
</body> #enctype="multipart/form-data" 是指分片上传
def upload(request):
if request.method == "POST":
#inp_post = request.POST #捕获提交来的数据
inp_file = request.FILES #捕获提交来的文件数据
get_file = inp_file.get('f1')
#print get_file.name #获取上传文件的文件名
#print get_file.size #获取上传文件的大小
f_obj = open(get_file.name,'wb')
for line in get_file.chunks():
f_obj.write(line)
f_obj.close()
return render(request,'home/upload.html')
效果:
Django进阶(路由系统、中间件、缓存、Cookie和Session、Ajax发送数据的更多相关文章
- Django(十三)状态保持 —— cookie与session+ajax异步请求+session记住登录状态+cookie记住登录名密码
一.状态保持的概述 http协议是无状态的.下一次去访问一个页面时并不知道上一次对这个页面做了什么.因此引入了cookie.session两种方式来配合解决此问题. Duplicate entry:重 ...
- Django 的路由系统
Django 的路由系统 Django 的路由系统 路由层 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$',views.ho ...
- Python学习(三十一)—— Django之路由系统
转载自:http://www.cnblogs.com/liwenzhou/p/8271147.html Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLc ...
- Django之路由系统 Dj
Django之路由系统 Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调 ...
- Django框架----路由系统(详细)
Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. ...
- Django之 路由系统
Django的路由系统 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这 ...
- Django 基础 路由系统
Django框架简介 MVC框架和MTV框架(了解即可) MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图 ...
- Django 的 路由系统
Django 的路由系统 URL 配置(URLconf)就像Django 锁支撑网站的目录. 它的本质就是URL 与要为该URL 调用的视图函数之间的映射表. 你就是以这种方式告诉Django, 对于 ...
- python 之 Django框架(路由系统、include、命名URL和URL反向解析、命名空间模式)
12.36 Django的路由系统 基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名) ...
随机推荐
- Intellij IDEA Scala开发环境搭建
1,在intellij 官网上下载IDEA 2,在scala官网上下载最新版scala 3,安装两个下载的文件 4,打开intellij,菜单栏help->find action 输入plu ...
- SGU438_The Glorious Karlutka River =)
好题,有一些人在河的一边,想通过河里的某些点跳到对岸去.每个点最多只能承受一定数量的人,每人跳跃一次需要消耗一个时间.求所有人都过河的最短时间. 看网上说是用了什么动态流的神奇东东.其实就是最大流吧, ...
- Linux下如何确认磁盘是否为SSD
方法 法1:通过查看/sys/block/sda/queue/rotational 通过cat /sys/block/sda/queue/rotational进行查看,返回值0即为SSD:返回1即为H ...
- 在tensorflow环境下安装matplotlib
在运行程序时,报错ImportError: No module named 'matplotlib',如图.经网上查询发现是没有安装matplotlib 因此记录一下在tensorflow环境下安装m ...
- jQueryEasyUI的使用
easyUI是一个基于jQuery的前端框架,如果想要使用easyUI就需要先导入easyUI的一些js文件和样式文件(本地化的JS文件可以自己选择是否导入),导入方式如下: 其中必须首先导入jQue ...
- Graph And Its Complement CodeForces - 990D(思维构造)
题意: 图中有n个点,开始有a个连通块,然后连着的边断开,不连的边连上,变为b个连通块,输出原图的邻接矩阵. 解析: 原图中连通块大于1的图,经过上述操作后,一定变成只有1个连通块的图. 若n != ...
- 【题解】JSOI2015染色问题
好像这个容斥还是明显的.一共有三个要求,可以用组合数先满足一个,再用容斥解决剩下的两个维.(反正这题数据范围这么小,随便乱搞都可以).用 \(a[k][i]\) 表示使用 \(k\) 种颜色,至少有 ...
- 洛谷 P1306 斐波那契公约数 解题报告
P1306 斐波那契公约数 题意:求\(Fibonacci\)数列第\(n\)项和第\(m\)项的最大公约数的最后8位. 数据范围:\(1<=n,m<=10^9\) 一些很有趣的性质 引理 ...
- 省选模拟赛 cti
3 cti (cti.cpp/in/out, 1s, 512MB)3.1 Description有一个 n × m 的地图, 地图上的每一个位置可以是空地, 炮塔或是敌人. 你需要操纵炮塔消灭敌人.对 ...
- mac 命令行大杂烩
一.实用的 1.代替 cat 的工具:bat,支持语法高亮.同时显示行号,使用: bat xx.yyy 安装:brew install bat 2.man 命令的替代品:tldr 安装:brew in ...