3.Flask基础-2
Flask基础-Part 2
本章完成以下内容:
- Session与Cookie
- 文件上传
- 日志
- 重定向和错误
- 配置信息
一、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相关推荐
- python flask快速入门与进阶-Flask基础进阶与python flask实战bbs教程
├─Flask基础进阶 │ 01-HTTP 基础知识.mp4 │ 02-python CGI 与 WebServer.mp4 │ 03-virtuanenv配置及Flask快速示例.mp4 │ 04- ...
- 一篇博客搞定flask基础(完结)
1.flask基础知识 1.1 flask框架介绍 Flask相比于django更加的轻量级,最核心的两个模块: Werkzeug(路由模块),模板引擎则使用 Jinja2.Flask不像django ...
- Flask 基础教学(一)
Flask 基础教学(一) Flask 是一个轻量级的 Python Web 框架,非常适合新手入门.本教程将详细介绍 Flask 的基础知识,帮助您快速上手. 1. 环境准备 在开始学习 Flask ...
- Flask基础知识总结
有一些东西是大多数网络应用都会用到的.比如许多应用都会使用关系型数据库和用户 验证,在请求之前连接数据库并得到当前登录用户的信息,在请求之后关闭数据库连接. 更多用户贡献的代码片断和方案参见 curr ...
- python - Flask 基础(1)
这两天稍微接触了一点 Flask 框架,所以分享点基础 1. 配置文件 from flask import Flaskapp = Flask(__name__) # 使用自定义的配置文件 app.co ...
- Python Flask基础教程(入门)
操作系统:Windows Python:3.5 欢迎加入学习交流QQ群:657341423 参考资料:请点击 安装:pip install flask即可 一个简单的Flask from flask ...
- Flask基础(一)
Flask 项目结构 projectName| - app # 应用程序包| - templates # jinjia2模板|- static # css,js 图片等静态文件| - main # p ...
- 轻量级web开发框架:Flask 基础教程
Flask 简介 什么是Flask? Flask是一个用Python编写的Web应用程序框架.Flask基于Werkzeug(WSGI工具包)和Jinja2模板引擎. 什么是Web Framework ...
- python框架之Flask基础篇(一)
一.第一个hello world程序 # coding=utf-8 from flask import Flaskapp = Flask(__name__)@app.route('/') def he ...
最新文章
- 导师吐槽大会开始:自己招的学生,哭着也要带完
- 文件格式 tar.gz zip zp2 zip rar
- MTK+Android编译
- Python之单元测试
- Android开发之跨进程通信-广播跨进程实现方法(附源码)
- 利用networkx求解网络的重叠度
- 晨哥真有料丨聊天就在一起了,真有这么简单吗?
- c++ 编译时检测结构体大小的的宏定义写法
- Oracle数据库日期格式转换操作
- NGUI学习笔记汇总
- python去噪函数_Python | 简单的扩音,音频去噪,静音剪切
- 软件测试(白盒测试入门之gtest测试)
- word之无法插入公式,公式图标灰色
- Unity3d C#实现语音合成(TTS)试听并选择路径保存下载功能(含源码)
- 基于Hardhat和Openzeppelin开发可升级合约(二)
- C++多线程,线程函数传参显示没有重载函数接受4个参数
- 自学就能轻松学会搭建网站的步骤教程
- 最新数据!国内5G手机出货已超29万部
- 算法设计与分析(python版)-作业三
- SAP 采购订单收货时报错:对于采购订单xxxx无收货可能