Flask基础-Part 2

本章完成以下内容:

  1. Session与Cookie
  2. 文件上传
  3. 日志
  4. 重定向和错误
  5. 配置信息

一、Session与Cookie

# 读取 cookies
from flask import request@app.route('/')
def index():username = request.cookies.get('username')# use cookies.get(key) instead of cookies[key] to not get a# KeyError if the cookie is missing.# 存储 cookies
from flask import make_response@app.route('/')
def index():resp = make_response(render_template(...))resp.set_cookie('username', 'the username')return resp

可以通过 cookies 属性来访问 Cookies,用响应对象的 set_cookie 方法来设置 Cookies。请求对象的 cookies 属性是一个内容为客户端提交的所有 Cookies 的字典。如果你想使用会话,请不要直接使用 Cookies,请参考 Session。

Session 对象。它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名。这意味着用户可以查看你 Cookie 的内容,但却不能修改它,除非用户知道签名的密钥。要使用会话,你需要设置一个密钥。

from flask import Flask, session, redirect, url_for, escape, requestapp = Flask(__name__)@app.route('/')
def index():if 'username' in session:return 'Logged in as %s' % escape(session['username'])return 'You are not logged in'@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':session['username'] = request.form['username']return redirect(url_for('index'))return '''<form action="" method="post"><p><input type=text name=username><p><input type=submit value=Login></form>'''@app.route('/logout')
def logout():# remove the username from the session if it's theresession.pop('username', None)return redirect(url_for('index'))# set the secret key.  keep this really secret:
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'

二、文件上传

用 Flask 处理文件上传很简单。只要确保你没忘记在 HTML 表单中设置 enctype=”multipart/form-data” 属性,已上传的文件存储在内存或是文件系统中一个临时的位置。你可以通过请求对象的 files 属性访问它们。每个上传的文件都会存储在这个字典里。它表现近乎为一个标准的 Python file 对象,但它还有一个 save() 方法,这个方法允许你把文件保存到服务器的文件系统上。

import os
from flask import Flask, request, redirect, url_for
from werkzeug import secure_filenameUPLOAD_FOLDER = '/path/to/the/uploads'
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024@app.route('/upload', methods=['GET', 'POST'])
def upload_file():if request.method == 'POST':f = request.files['the_file']f.save('/var/www/uploads/' + secure_filename(f.filename))

更简单解决方案
因为存在一个处理上传文件的范式,这个范式在大多数应用中机会不会有太大改变, 所以 Flask 存在一个扩展名为 Flask-Uploads ,这个扩展实现了一整套成熟的文件上传架构。它提供了包括文件类型白名单、黑名单等多种功能。

三、日志

从 Flask 0.3 开始,Flask 就已经预置了日志系统。

app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')

附带的 logger 是一个标准日志类 Logger ,所以更多信息请查阅 logging 的文档 。

四、重定向和错误

你可以用 redirect() 函数把用户重定向到其它地方。放弃请求并返回错误代码,用 abort() 函数。

from flask import abort, redirect, url_for@app.route('/')
def index():return redirect(url_for('login'))@app.route('/login')
def login():abort(401)this_is_never_executed()

默认情况下,错误代码会显示一个黑白的错误页面。如果你要定制错误页面, 可以使用 errorhandler() 装饰器:

from flask import render_template@app.errorhandler(404)
def page_not_found(error):return render_template('page_not_found.html'), 404

如果你想在视图里操纵上述步骤结果的响应对象,可以使用 make_response() 函数。
譬如你有这样一个视图:

@app.errorhandler(404)
def not_found(error):return render_template('error.html'), 404

你只需要把返回值表达式传递给 make_response() ,获取结果对象并修改,然后再返回它:

@app.errorhandler(404)
def not_found(error):resp = make_response(render_template('error.html'), 404)resp.headers['X-Something'] = 'A value'return resp

五、配置信息

Flask 被设计为需要配置来启动应用。你可以在代码中硬编码配置,这对于小的应用并不坏,但是有更好的方法。跟你如何载入配置无关,会有一个可用的配置对象保存着载入的配置值: Flask 对象的 config 属性。这是 Flask 自己放置特定配置值的地方,也是扩展可以存储配置值的地方。但是,你也可以把自己的配置保存到这个对象里。

config 实际上继承于字典,并且可以像修改字典一样修改它:

app = Flask(__name__)
app.config['DEBUG'] = True

给定的配置值会被推送到 Flask 对象中,所以你可以在那里读写它们:app.debug = True

你可以使用 dict.update() 方法来一次性更新多个键:

app.config.update(DEBUG=True,SECRET_KEY='...'
)

从文件配置
如果你能在独立的文件里存储配置,理想情况是存储在当前应用包之外,它将变得更有用。

app = Flask(__name__)
app.config.from_object('yourapplication.default_settings')
app.config.from_envvar('YOURAPPLICATION_SETTINGS')

首先从 yourapplication.default_settings 模块加载配置,然后用 YOURAPPLICATION_SETTINGS 环境变量指向的文件的内容覆盖其值。

配置文件其实是 Python 文件。只有大写名称的值才会被存储到配置对象中。所以请确保你在配置键中使用了大写字母。

# Example configuration
DEBUG = False
SECRET_KEY = '?\xbf,\xb4\x8d\xa3"<\x9c\xb0@\x0f5\xab,w\xee\x8d$0\x13\x8b83'

3.Flask基础-2相关推荐

  1. python flask快速入门与进阶-Flask基础进阶与python flask实战bbs教程

    ├─Flask基础进阶 │ 01-HTTP 基础知识.mp4 │ 02-python CGI 与 WebServer.mp4 │ 03-virtuanenv配置及Flask快速示例.mp4 │ 04- ...

  2. 一篇博客搞定flask基础(完结)

    1.flask基础知识 1.1 flask框架介绍 Flask相比于django更加的轻量级,最核心的两个模块: Werkzeug(路由模块),模板引擎则使用 Jinja2.Flask不像django ...

  3. Flask 基础教学(一)

    Flask 基础教学(一) Flask 是一个轻量级的 Python Web 框架,非常适合新手入门.本教程将详细介绍 Flask 的基础知识,帮助您快速上手. 1. 环境准备 在开始学习 Flask ...

  4. Flask基础知识总结

    有一些东西是大多数网络应用都会用到的.比如许多应用都会使用关系型数据库和用户 验证,在请求之前连接数据库并得到当前登录用户的信息,在请求之后关闭数据库连接. 更多用户贡献的代码片断和方案参见 curr ...

  5. python - Flask 基础(1)

    这两天稍微接触了一点 Flask 框架,所以分享点基础 1. 配置文件 from flask import Flaskapp = Flask(__name__) # 使用自定义的配置文件 app.co ...

  6. Python Flask基础教程(入门)

    操作系统:Windows Python:3.5 欢迎加入学习交流QQ群:657341423 参考资料:请点击 安装:pip install flask即可 一个简单的Flask from flask ...

  7. Flask基础(一)

    Flask 项目结构 projectName| - app # 应用程序包| - templates # jinjia2模板|- static # css,js 图片等静态文件| - main # p ...

  8. 轻量级web开发框架:Flask 基础教程

    Flask 简介 什么是Flask? Flask是一个用Python编写的Web应用程序框架.Flask基于Werkzeug(WSGI工具包)和Jinja2模板引擎. 什么是Web Framework ...

  9. python框架之Flask基础篇(一)

    一.第一个hello world程序 # coding=utf-8 from flask import Flaskapp = Flask(__name__)@app.route('/') def he ...

最新文章

  1. 导师吐槽大会开始:自己招的学生,哭着也要带完
  2. 文件格式 tar.gz zip zp2 zip rar
  3. MTK+Android编译
  4. Python之单元测试
  5. Android开发之跨进程通信-广播跨进程实现方法(附源码)
  6. 利用networkx求解网络的重叠度
  7. 晨哥真有料丨聊天就在一起了,真有这么简单吗?
  8. c++ 编译时检测结构体大小的的宏定义写法
  9. Oracle数据库日期格式转换操作
  10. NGUI学习笔记汇总
  11. python去噪函数_Python | 简单的扩音,音频去噪,静音剪切
  12. 软件测试(白盒测试入门之gtest测试)
  13. word之无法插入公式,公式图标灰色
  14. Unity3d C#实现语音合成(TTS)试听并选择路径保存下载功能(含源码)
  15. 基于Hardhat和Openzeppelin开发可升级合约(二)
  16. C++多线程,线程函数传参显示没有重载函数接受4个参数
  17. 自学就能轻松学会搭建网站的步骤教程
  18. 最新数据!国内5G手机出货已超29万部
  19. 算法设计与分析(python版)-作业三
  20. SAP 采购订单收货时报错:对于采购订单xxxx无收货可能

热门文章

  1. linux更改权限报io错误,用户命令、权限、IO重定向、grep
  2. 210807算法日记:文件后缀数据点的生成洛谷数据点的上传
  3. SAP MDG —— 更好地理解你的数据变更
  4. python视频转图片、图片转视频
  5. 诺基亚2009挑战赛和Ovi Store
  6. 63 个面向前端开发人员的开源项目工具
  7. 医用电器和医用电气设备有啥区别?
  8. linux清除位图缓存,ElasticSearch的缓存清除策略
  9. 渐变折射率光纤的理论分析和光纤的损耗
  10. NOIP2014 飞扬的小鸟 题解