路由系统

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中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而是路由系统变得简洁。
通过反射机制,可以为django开发一套动态的路由系统Demo
 
 
 
中间件

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、创建中间件类

2、注册中间件
3、执行顺序
4、view出错,时执行
process_exception(self, request, exception)
 
 

缓存

由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者Redis中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回,

 
一、配置 settings.py
 
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
        }
    }
} 
2、应用,已装饰器的方式调用
 
3、缓存
第一次刷新页面后,会得到一个用户存放缓存文件的文件夹
 15分钟内,再次刷新页面,都会从缓存文件中读取内容,页面不会再有变化。

更多参考资料:

  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失效策略。

  

通过session来持久登陆
准备工作:
    1、注释
       #'django.middleware.csrf.CsrfViewMiddleware',
    2、创建并同步数据库
   python manage.py makemigrations
        python manage.py migrate

测试页面
直接访问 home页,会被跳转到login页面
用户登陆及退出登陆了状态
不同用户返回不同页面,标记用户名,并且可以注销登陆状态
 
 
 
Ajax发送数据
Ajax发送简单数据类型数据
<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提交的数据

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>

成功获取到字典数据。并返回执行结果

  

  

 
 
 
 
 
 
 
Django上传文件的实例:
<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发送数据的更多相关文章

  1. Django(十三)状态保持 —— cookie与session+ajax异步请求+session记住登录状态+cookie记住登录名密码

    一.状态保持的概述 http协议是无状态的.下一次去访问一个页面时并不知道上一次对这个页面做了什么.因此引入了cookie.session两种方式来配合解决此问题. Duplicate entry:重 ...

  2. Django 的路由系统

    Django 的路由系统   Django 的路由系统 路由层 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$',views.ho ...

  3. Python学习(三十一)—— Django之路由系统

    转载自:http://www.cnblogs.com/liwenzhou/p/8271147.html Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLc ...

  4. Django之路由系统 Dj

    Django之路由系统   Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调 ...

  5. Django框架----路由系统(详细)

    Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. ...

  6. Django之 路由系统

    Django的路由系统 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这 ...

  7. Django 基础 路由系统

    Django框架简介 MVC框架和MTV框架(了解即可) MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图 ...

  8. Django 的 路由系统

    Django 的路由系统 URL 配置(URLconf)就像Django 锁支撑网站的目录. 它的本质就是URL 与要为该URL 调用的视图函数之间的映射表. 你就是以这种方式告诉Django, 对于 ...

  9. python 之 Django框架(路由系统、include、命名URL和URL反向解析、命名空间模式)

    12.36 Django的路由系统 基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名) ...

随机推荐

  1. SET ANSI_NULLS ON,SET NOCOUNT ON,SET QUOTED_IDENTIFIER ON

    SET ANSI_NULLS ONTransact-SQL 支持在与空值进行比较时,允许比较运算符返回 TRUE 或 FALSE. 通过设置 ANSI_NULLS OFF 可将此选项激活.当 ANSI ...

  2. 链表java实现

    链表是用指针将多个节点联系在一起,通过头节点和尾节点还有节点数量,可以对链表进行一系列的操作.是线性表的链式存储实现. 1.链表是多个不连续的地址组成在一起根据指针链接在一起的,由多个节点组成,每个节 ...

  3. THUWC2017颓废记

    2.9翘掉Wc闭幕式,和石家庄大爷们坐一辆车去杭州…路上日常orz gzz.2.10早上来报到,拍照.宿舍里另外四个人都是GD大爷.开幕式是喜闻乐见的thu日常黑pku(“在中国,世界一流大学有两所, ...

  4. Day24-图片验证码----待续

    一,上课所讲---------没听懂!!! 1,首先,图片验证码不能放到客户浏览器的cookie上,否则,客户可以直接从它的浏览器上拿到,然后自动提交,这样的话,验证码就没有任何用处了.所以图片验证码 ...

  5. Tengine,轻量级Web服务器

    阿里妹导读:Tengine,轻量级Web服务器,基于Nginx进行开发,针对大访问量网站的需求,新增了很多高级功能和特性.比如,Tengine兼容Nginx的所有配置,并且增加了独立进程框架.页面优化 ...

  6. POJ 2155 Matrix (矩形)

    date:公元2017年7月19日适逢周三: location:清北集训 杭州 point:二维树状数组/二维差分 Matrix Time Limit: 3000MS   Memory Limit:  ...

  7. 【科技】扩展Lucas随想

    扩展Lucas解决的还是一个很Simple的问题: 求:$C_{n}^{m} \; mod \; p$. 其中$n,m$都会比较大,而$p$不是很大,而且不一定是质数. 扩展Lucas可以说和Luca ...

  8. Linux内核设计第八周学习总结 理解进程调度时机跟踪分析进程调度与进程切换的过程

    陈巧然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.视频内容 Linux ...

  9. Webpack + React 开发 03 props

    React中组件的用法与原生的 HTML 标签完全一致,可以任意加入属性,比如 <HelloWorld name="John"> ,就是 HelloWorld 组件加入 ...

  10. (一)C的编译,printf,规范化

    (一)编译的具体过程: 以前一直觉得,C代码的具体实现过程就是把几个.c文件编译成.o文件,然后链接在一起就可以了.可是最近在看C Prime Plus查漏补缺基础知识的过程中发现,这里的链接其实链接 ...