这篇博客是我刚接触 flask,研究文档时的一些记录与体会,希望对各位刚接触 flask 的朋友有所帮助。
且在此篇后,我还会另写一篇关于纯后端的 flask 教程,介绍一下如何使用 flask 创建一个较为完善的纯后端的服务。
在阅读下面的内容前,读者应该具有基础的python知识,且配置好了python环境。
安装 flask:
pip install flask
一个基于 flask 的最小应用应当如下:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "Hello, World!
"
首先我们导入了 Flask 类。该类的实例将会成为我们的 WSGI 应用。(WSGI 提供了一个规范,使得不同的 Web 应用程序和服务器可以进行交互,从而实现了在不同环境中运行同一个应用程序的可能性。)
接着我们创建一个该类的实例。第一个参数是应用模块或者包的名称。 __name__ 是一个适用于大多数情况的快捷方式。有了这个参数, Flask 才能知道在哪里可以找到模板和静态文件等东西。(__name__: 表示当前模块的名字。如果是主模块(即直接运行的脚本),其值为 __main__)
然后我们使用 route() 装饰器来告诉 Flask 触发函 数的 URL 。
函数返回需要在用户浏览器中显示的信息。默认的内容类型是 HTML ,因此 字符串中的 HTML 会被浏览器渲染。
把它保存为 hello.py 或其他类似名称。请不要使用 flask.py 作为应用名称,这会与 Flask 本身发生冲突。
可以使用 flask 命令或者 python -m flask 来运行这个应 用。你需要使用 --app 选项告诉 Flask 哪里可以找到应用(如果文件名为 app.py 或者 wsgi.py ,那么不需要使用 --app):
flask --app hello run
或
python hello.py
现在在浏览器中打开 http://127.0.0.1:5000/ ,应该可以看到 Hello World! 字样。
如果在使用 flask 命令启动时,还可以添加 --debug 开启调试模式,这样在发生错误的时候,在页面上可以看到错误提示。
@app.route()来配置路由,从上面的例子应该看出,当我们访问对应路由的时候,该配置能将请求交由对应函数进行处理,函数的返回值即为请求的响应值:@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
<>表示动态路由参数,并使用函数形参接收:from markupsafe import escape
@app.route('/user/' )
def show_user_profile(username):
# show the user profile for that user
return f'User {escape(username)}'
@app.route('/post/' )
def show_post(post_id):
# show the post with the given id, the id is an integer
return f'Post {post_id}'
@app.route('/path/' )
def show_subpath(subpath):
# show the subpath after /path/
return f'Subpath {escape(subpath)}'

from flask import url_for
app = Flask(__name__)
@app.route('/')
def index():
return 'index'
@app.route('/login')
def login():
return 'login'
@app.route('/user/' )
def profile(username):
return f'{username}\'s profile'
with app.test_request_context():
print(url_for('index'))
print(url_for('login'))
print(url_for('login', next='/'))
print(url_for('profile', username='John Doe'))
/
/login
/login?next=/
/user/John%20Doe
@app.route默认只匹配 GET 请求,而如果想要能够匹配别的HTTP方法,或者多种HTTP方法,则可这么做:from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return do_the_login()
else:
return show_the_login_form()
request后,可以通过其获取当前请求的请求方式,如果携带有请求体,则还可以通过它拿到传参。