python web 开发 - flask 框架使用(一)
开篇
本文主要内容是对 flask 框架官方文档的 (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 等等
