Django进阶(路由系统中间件缓存Cookie和Session

Posted Root用户

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django进阶(路由系统中间件缓存Cookie和Session相关的知识,希望对你有一定的参考价值。

路由系统

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页面
用户登陆及退出登陆了状态
不同用户返回不同页面,标记用户名,并且可以注销登陆状态