Flask基础学习
- 使用virtualenv实现python的虚拟环境
- Python Flask 入门开发
- Python Flask框架配置管理加载的三种方式
- Python Flask 路由配置
- Python Flask静态文件配置
- Python Flask模板渲染
- Python Flask 蓝图Blueprint
- Flask 使用Context上下文
- Flask中SQLAlchemy的使用
Flask 扩展
- 使用flask-script实现Flask项目定制shell功能
- Flask 中使用flask-admin实现数据模型绑定视图
- Flask 中使用mysql数据库
- Flask使用flask-migrate实现数据库迁移
Flask 进阶
Flask
中通过使用route
装饰器实现路由访问功能,其路由匹配URL
规则基于Werkzeug
的路由模块。该模块基于Apache
及更早的HTTP
服务器主张,希望保证优雅且唯一的URL
。其使用格式如下:
from flask import Flask
app = Flask(__name__)
@app.route('/hello')
def hello():
return 'Hello, World'
if __name__ == '__main__':
app.run(port=8080)
如上,可以通过访问:http://127.0.0.1:8080/hello
.
URL规则
route
装饰器基于Werkzeug
规则实现,我们可以通过把URL的一部分标记为 <variable_name>
就可以在 URL
中添加变量,也可以通过使用<converter:variable_name>
添加一个转换器来指定规则,支持的converter
转换器类型如下:
string
:接受任何没有斜杠 “/” 的文本(默认类型)int
:接受整数float
:接受浮点数path
:类似默认string
,但也接受斜杠uuid
:只接受uuid字符串any
:可以指定多种路径,但是需要传入参数
如下示例列出几类常见的路由规则,代码如下:
from flask import Flask
from markupsafe import escape
app = Flask(__name__)
# URL没有尾部斜杠,访问这个URL就会得到一个 404
@app.route('/hello')
def hello():
return 'Hello, World'
# 访问没有斜杠结尾的URL时会自动进行重定向,帮您在尾部加上一个斜杠
@app.route('/projects/')
def projects():
return '项目页面'
# path变量路由,支持get、post方法
@app.route('/user/<username>', methods=['GET', 'POST'])
def profile(username):
return f'{username}的个人页面'
# 指定path参数为int类型,如:/post/123
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f'文章编号 {post_id}'
# 展示/path/之后的子路径地址
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
return f'子路径 {escape(subpath)}'
if __name__ == '__main__':
app.run(port=8080)
URL 构建
url_for()
可以用于构建指定函数的URL
,其使用格式:url_for(<function-name>,dicts)
,且url_for
会自动换衣特殊字符和unicode
编码数据,而无需自己构建。
from flask import url_for,Flask
from markupsafe import escape
app = Flask(__name__)
@app.route('/hello')
def hello():
return 'hello world'
@app.route('/getUserById')
def getUser(id):
return f'当前用户Id:{id}'
@app.route('/user/<username>')
def user(username):
return f'访问者:{username}'
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
return f'子路径 {escape(subpath)}'
with app.test_request_context():
print(url_for('hello'))
print(url_for('getUser',id=1000))
print(url_for('user',username="蔡海飞"))
print(url_for('show_subpath', subpath='subpath/b'))
# 运行结果
Administrator@SK-20210214MAUY MINGW64 /g/projects/python/pythonNotes/flask (master)
$ python url_for.py
/hello
/getUserById?id=1000
/user/%E8%94%A1%E6%B5%B7%E9%A3%9E
/path/subpath/b