开篇
本文主要内容是对 flask 框架官方文档的 quickstart (flask 如何使用)部分内容(项目中需要用到的知识点)进行简单总结。
准备工作
- python 基础
- web 开发经验
- 安装 python
- 安装 flask => pip install flask
- 一个 IDE => 个人推荐 vscode 或者 pycharm
正文
1. 编写一个 helloworld
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
通过 IDE 运行,然后在浏览器上访问 localhost:5000
解释下上面的代码都做了什么
- 导入 Flask 类
- 实例化 Flask 类
- 通过 route() 告诉 Flask 方法和 URL 的映射关系
- 将 Hello,World 字符串显示在浏览器
2. 路由
通过上面的 helloworld 程序已经了解到,Flask 框架是 通过 route() 将 URL 动态的跟函数绑定在一起,下面补充一个规则 - 将参数变量放在路径中。
# zhangsan 和 123 为参数,参数类型不受限制
# 正确示例
# 1. localhost:5000/user/zhangsan
# 2. localhost:5000/user/123
# 错误示例,报错: 404
# 1. localhost:5000/user
# 2. localhost:5000/user/
@app.route('/user/<username>')
def show_user(username):
print(username)
return 'User'
# 跟上面不同的地方是,这里限制了参数类型为 int
# 正确示例
# 1. localhost:5000/post/123
# 错误示例
# 1. localhost:5000/post/aaa
@app.route('/post/<int:post_id>')
def show_post(post_id):
print(post_id)
return 'Post'
# 不仅包含第一个示例的作用,还可以有如下用法:
# 访问: localhost:/path/subpath1/subpath2
# 打印结果 : subpath1/subpath2
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
print(subpath)
return 'Subpath'
3. URL 末尾有无反斜杠的区别
对比下面两个路径 /test1/ 和 /test2, 前者比后者末尾多了一个反斜杠。
@app.route('/test1/')
def test1():
return 'test1'
@app.route('/test2')
def test2():
return 'test2'
正常情况下:
访问 localhost:5000/test1/ 和 localhost:5000/test2 即可请求到资源。
但是,
当我们访问 localhost:5000/test1 时, 会重定向到 localhost:5000/test1/
当我们访问 localhost:/5000/test2/ 时,就会出现 404 not found。
4. HTTP 方法
访问 URL 时, web 应用会使用不同的 http 方法,比如 get ,post 等。默认只支持 GET 方法。
例如,当我们用 post 方法访问上面任意一个 url 时,会出现下面的 405 状态码。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method is not allowed for the requested URL.</p>
指定 method 方法
@app.route('/login', methods=['GET', 'POST'])
def login():
pass
5. request 对象
有了 request 对象,我们就可以获取请求对象里面的参数,比如 form 表单提交的参数,url 后面的key - value参数,请求方法类型(get 或 post)等等。
from flask import request
@app.route('/login', methods=['POST', 'GET'])
def login():
# 获取表单参数
username = request.form['username']
password = request.form['password']
# TODO 省略部分业务逻辑
return 'login success'
# 例如: localhost:5000/search?key=value
@app.route('/search', methods=['POST', 'GET'])
def search():
# 获取 url 参数
searchword = request.args.get('key', '')
# TODO 省略部分业务逻辑
return 'search success'
6. 如何响应 json
- 方式一 : 返回字典类型,会自动转换为 json
def user_api():
return {
"username": '章三',
"age": '123',
}
- 方式二 : 依赖 jsonify
fron flask import jsonify
def user_api():
data = [{'username': 'zhaSan', 'password': "123456"},
{'username': 'wangWu', 'password': "123456"}]
return jsonify(data)
总结
本文可能还有如下诸多内容未涉及,会在后面的博客中补充进去。
- 上传文件
- 访问静态资源
- cookie
- session
- 等等