Flask中的g对象是个很好的东西,主要用于在一个请求的过程中共享数据。可以随意给g对象添加属性来保存数据,非常的方便,下面的代码是一个使用g对象的例子。下面的这个例子会使用random随机产生一个0~9的整数,并使用g.x保存并记录debug日志:

  1. # encoding=utf-8
  2. from flask import Flask
  3. from flask import g
  4. import random
  5.  
  6. app = Flask(__name__)
  7.  
  8. @app.before_request
  9. def set_on_g_object():
  10. x = random.randint(0,9)
  11. app.logger.debug('before request g.x is {x}'.format(x=x))
  12. g.x = x
  13.  
  14. @app.route("/")
  15. def test():
  16. g.x=1000
  17. return str(g.x)
  18.  
  19. @app.after_request
  20. def get_on_g_object(response):
  21. app.logger.debug('after request g.x is{g.x}'.format(g=g))
  22. return response

二:Flask中静态文件的处理

1.add_url_rule的用法

Flask中提供了url_for来实现创建url,只是生成一个url。在前面的博文中谈论过如果要生成一个css样式的静态文件的url需要使用url_for('static',filename='style.css')来创建相应的url。但是如果我有一个目录attachment的目录存放一些文件的话是没法通过url_for来生成的,默认url_for只可以为static和一些view_func建立url如果要想通过url_for为attachment来添加url就必须添加一个add_url_rule。

  1. # encoding=utf-8
  2. from flask import Flask
  3. from flask import g
  4. from flask import send_from_directory
  5. from flask import url_for
  6. import random
  7.  
  8. app = Flask(__name__)
  9.  
  10. @app.route("/")
  11. def test():
  12. return "url创建方式一"
  13.  
  14. def hello():
  15. return "url创建方式二"
  16.  
  17. app.add_url_rule("/index/",endpoint="hello",view_func=hello)
  18.  
  19. @app.route('/url1')
  20. def Create_url1():
  21. return url_for('static',filename="style.css")
  22.  
  23. app.add_url_rule('/attachment/<path:filename>',endpoint='attachment',build_only=True)
  24. @app.route('/url2')
  25. def Create_url2():
  26. return url_for('attachment',filename="upload.txt")

2.send_from_directory的用法

send_from_directory主要用于下载文件:

下面是一个文件的下载实例

 
  1. # encoding=utf-8
  2. from flask import Flask
  3. from flask import g
  4. from flask import send_from_directory
  5. from flask import url_for
  6. import os.path
  7.  
  8. app = Flask(__name__)
  9. dirpath = os.path.join(app.root_path,'upload')
  10. @app.route("/download/<path:filename>")
  11. def downloader(filename):
  12. return send_from_directory(dirpath,filename,as_attachment=True)

首选在application下建立一个upload目录,构造upload目录的绝对路径。

然后通过浏览器输入指定文件的文件名来下载。

3.static_url_path和static_folder的用法

static_url_path主要用于改变url的path的,静态文件放在static下面,所以正常情况url是static/filename ,但是可以通过static_url_path来改变这个url

static_folder主要是用来改变url的目录的,默认是static,可以通过这个变量来改变静态文件目录。

  1. # encoding=utf-8
  2. from flask import Flask
  3. from flask import g
  4. from flask import send_from_directory
  5. from flask import url_for
  6. import os.path
  7.  
  8. app = Flask(__name__,static_url_path="/test")
  9.  
  10. @app.route("/")
  11. def static_create():
  12. return url_for('static',filename='style.css')

4.静态页面缓存和文件索引

SEND_FILE_MAX_AGE_DEFAULT 这个变量用于配置静态文件缓存的时间,Flask默认缓存时间是12hours

例如:app.comfig['SEND_FILE_MAX_AGE_DEFAULT']=2592000 将其缓存时间改为了30天。

Flask不能实现文件索引的功能,也就是无法列出文件名,这个需要web server(Nginx 或 Apache)来实现。

5、session 也是一个 request context 的变量,但它把数据保存到了 cookie 中并发送到了客户端,客户端再次请求的时候又带上了cookie

 

flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法的更多相关文章

  1. flask中Flask()和Blueprint() flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法

    1.Blueprint()在蓝本注册函数register_blueprint()中,第一个参数为所注册的蓝本名称.当我们在应用对象上注册一个蓝图时,需要指定一个url_prefix关键字 参数(这个参 ...

  2. Flask中的g到底是个什么鬼?

    g到底是个什么鬼? 在一次请求请求的周期,可以在g中设置值,在本次的请求周期中都可以读取或复制. 相当于是一次请求周期的全局变量. from flask import Flask,g app = Fl ...

  3. flask中的static_path和static_path_url和static_folder

    static_folder表示静态文件所在路径,默认为root_dir下的static文件夹 static_url_path的行为比较复杂 如果static_folder未被指定(也就是默认值stat ...

  4. Flask 中command的使用

    其实这个标题有点大了,只是记录以一下flask中command的一个使用方式,具体用法还需要看相关文档. 之前的项目中需要加一个定时任务所以在flask中写了个任务执行. 首先需要在manage.py ...

  5. Flask中current_app和g对象

      Flask零基础到项目实战(七)请求方法.g对象和钩子函数 一.get方法 二.post方法 post请求在模板中要注意几点: input标签中,要写name来标识这个value的key,方便后台 ...

  6. flask中的蓝图与红图

    内容: 1.flask中的蓝图 2.flask子域名实现 3.flask中的红图 1.flask中的蓝图 一个大型项目中视图比较多,如果仅仅是写在app.py中不方便管理,蓝图就可以做到分功能分目录结 ...

  7. 你真的懂Flask中浅谈蓝图Blueprint吗?

    一,什么是Flask中的蓝图Blueprint Blueprint是用于实现Flask框架中单个应用的视图,模板,静态文件的集合. Blueprint 是一个存储操作(路由映射)方法的容器,这些操作在 ...

  8. day94:flask:Jinjia2模板引擎&flask中的CSRF攻击&Flask-SQLAlchemy的创建模型类和基本的增删改查

    目录 1.Jinjia2模板引擎 1.Jinjia2加载模板并传递数据到模板中 2.Jinjia2的模板语句 3.模板中特有的变量和函数 4.模板中内置的过滤器 5.自定义过滤器 6.模板继承 2.在 ...

  9. Flask中的蓝图(BluePrint)、

    蓝图 1.初识Flask蓝图(BluePrint) 创建一个项目然后将目录结构做成: user.py中的内容 from flask import Blueprint, render_template ...

随机推荐

  1. LR函数基础(一)

    函数用到:web_reg_find(). lr_log_message(). lr_eval_string().strcmp().atoi() Action(){    web_reg_find(&q ...

  2. 突破单机多实例Elasticsearch

    默认大家都是单机单实例es,在实验环境下想尽可能模拟各种场景.单机多实例就出来了... 实验拓扑图 01.es安装这里就不说了 详情:http://www.cnblogs.com/xiaochina/ ...

  3. 开发完 iOS 应用,接下去你该做的事

    iOS专项总结 一个应用经过多次迭代后告一段落,接下去我们在技术上还可以做些什么呢?答案是提高代码的整体质量.关于这方面,除了我们常喊的 重构,测试也非常重要. 博主近期给我们的 iOS客户端代码来了 ...

  4. 【LeetCode】41. First Missing Positive (3 solutions)

    First Missing Positive Given an unsorted integer array, find the first missing positive integer. For ...

  5. 【JAVA】Exception in thread "main" java.lang.NoClassDefFoundError

    java新手经常会遇到这个问题. 环境变量配置正确,eclipse下可以正常编译运行,命令行下可以使用javac生成.class文件,但是在当前目录运行的时候提示: 分析报错,可以发现系统从Pack文 ...

  6. APP流氓大法之apk 静默安装

    老大要我弄个自动更新,要用到静默安装,网上找到了些大拿的代码,我拿去改吧改吧,先贴出来: /** * 软件静默安装 * @param apkAbsolutePath apk文件所在路径 * @retu ...

  7. RabbitMQ消息队列(三):任务分发机制[转]

    在上篇文章中,我们解决了从发送端(Producer)向接收端(Consumer)发送“Hello World”的问题.在实际的应用场景中,这是远远不够的.从本篇文章开始,我们将结合更加实际的应用场景来 ...

  8. 什么是Asterisk,它如何帮助我们的呼叫中心?

    如今的呼叫中心与过去的呼叫中心有很大差异.过去,一间房屋或一座大楼,装上硬接线的POTS电话,招聘几名员工就可以建立一个呼叫中心.如今,这样的情形已经一去不复返,因为有许多新技术让呼叫中心变得更像是一 ...

  9. VC++获取操作系统的版本 GetVersionEx函数

    原文链接: http://blog.sina.com.cn/s/blog_8a7012cf010189tn.html 函数:BOOL CSystemOperate::GetOSDisplayStrin ...

  10. 在T-SQL语句中访问远程数据库

    1.启用Ad Hoc Distributed Queries 在使用openrowset/opendatasource前搜先要启用Ad Hoc Distributed Queries服务,因为这个服务 ...