0%

Flask文档笔记-快速开始(QuickStart)

这是第二次用Flask了,感觉非常好用,因为简便,可以很快看到demo。

Flask是使用python语言,基于Werkzeug,Jinja2的web开发微框架。作者Armin Ronacher 是出生于1989年的奥地利程序员,2010年时发布了第一版的Flask。目前0.12.2版本的flask也就3k多行代码,但是功能还是相对完善的,主要得益于flask的插件机制。

最简单的Flask程序

1
2
3
4
5
6
7
8
9
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
return 'Hello, World!'

if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=8000, threaded=True)

URL路由

通过@app.route('/')这个装饰器,就可以指定url对应的业务处理函数。在相应函数里面可以完成各种CRUD的功能,并返回一个页面或者json对象。

可以在route里面增加变量,比如@app.route('/post/<int:post_id>')

HTTP Methods

url对应的同一个函数,可以针对不同的method进行不同的业务逻辑处理。默认只处理GET,如果要处理其他方法,需要在装饰器中添加参数,例子如下:

1
2
3
4
5
6
7
8
from flask import request

@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
do_the_login()
else:
show_the_login_form()

静态文件

在应用目录下,建一个static的文件夹,这是flask就可以处理这个目录的静态文件,比如css, js, jpg这类的文件。

模板渲染

flask通过render_template函数,对模板进行相关变量替换,底层是依赖jinja2,貌似jinja的作者也是Armin Ronacher。所有的模板文件需要放在templates目录下。同时在模板中还可以使用request, session, g等全局对象。

获取Request数据

web应用主要是处理用户提交的各种数据。flask通过request这个全局对象来获取各种数据。

1,Post的form数据通过request.form['xxx'] 这种方式得到;

2,就是URL上的参数通过request.args.get('key', '')来访问。

3,上传的文件。request.files['the_file']获得一个文件,然后通过save函数保存到磁盘。

4,Cookie。request.cookies.get('xxx')这个函数可以得到cookie中的数值,如果要写入cookie,需要用response对象的set_cookie函数。

重定向

在某些情况下,页面需要重定向到其他页面,比如登陆后的页面,这是需要redirect和url_for 配合就可以了。

关于Response

Flask会把view函数返回数据自动转化为response对象,如果直接返回response对象,那就不进行转化。这里主要涉及的操作是render_templatemake_response。需要需要修改cookie和header都在这里进行处理

Sessions

Flask的标准session是放在cookie中的一个加密串,里面会保存一些特定的,不想让用户修改和看到的信息。需要设置app.secret_key才会生效。

日志

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

Flask有内置的WebServer可以处理HTTP请求。再加上页面的Routing,请求Request对象, 应答Response对象,加上业务逻辑view function,就可以很快实现一个web 应用。普通页面的网站通过templates目录下的模板,用jinja2来生成页面即可。