一、flask-script扩展库
安装:
sudo pip3 install flask-script
简介:
简单来说 就是一个flask终端运行的解析器 因为在代码完成以后 不能有任何的改动。
导入:
from flask_script import Manager
常用的启动项
名称 | 作用 |
---|---|
-h | host主机名 |
-p | port 端口号 |
-d | debug 调试模式 |
-r | reloading 加载 |
--threaded | 开启多线程 |
python3 manage.py runserver -h0.0.0.0 -p5000 -d -r --threaded
python3 manage.py -d -r 只开启调试模式和重新加载
使用
from flask import Flask
from flask_script import Manager
app = Flask(__name__)
manager = Manager(app) #实例化 Manager类
@app.route('/')
def index():
return 'index.html'
if __name__ == '__main__':
# app.run()
manager.run()
二、蓝本Blueprint
概述:
当代码越来越复杂的时候 把所有的代码 都放在一个文件中 明显是不合理的 需要根据不同模块功能进行划分 蓝本就是解决这个问题的
使用:
from flask import Blueprint
实例
import user #导入user蓝本对象
#注册user蓝本
# app.register_blueprint(user.user)
#给当前的蓝本起前缀名称
app.register_blueprint(user.user,url_prefix='/user')
在user.py中的代码
from flask import Blueprint #导入蓝本
#第一个user 因为当前是关于用户处理的蓝本 顾名思义 所有叫user user是给当前所有的视图添加装饰器来用的
user = Blueprint('user',__name__)
@user.route('/login/')
def login():
return '欢迎登录'
@user.route('/logout/')
def logout():
return '退出登录'
访问
带前缀的访问
127.0.0.1:5000/user/login/
没有前缀的访问
127.0.0.1:5000/login/
三、重定向
概述:
从一个路由跳转到另外的一个路由地址
使用:
redirect
导入
from flask import redirect
参数
要跳转的路由地址
实例
@app.route('/')
def index():
return 'index.html'
#重定向的测试的视图函数
@app.route('/test/')
def test():
# return 'test'
# return redirect('/')
return redirect('/arg/18/')
#带参数的路由
@app.route('/arg/<int:age>/')
def arg(age):
return 'age的值为{}'.format(age)
注意:
使用redirect 重定向 是美亚任何问题 但是 一旦路由地址发生改变 所有对应当期的重定向的地址 都需要修改
url_for 通过视图函数 反向构造出路由地址
导入
from flask import url_for
#重定向的测试的视图函数
@app.route('/test/')
def test():
return url_for('index') # /
return url_for('indexx') #传递一个不存在的视图函数 则报错
return url_for('arg',age=18) #传递一个不存在的视图函数 则报错
return url_for('arg',age=18,name='zhangsan') #传递一个不存在的视图函数 则报错
return redirect(url_for('arg',age=18,name='zhangsan')) #传递一个不存在的视图函数 则报错
return redirect('/arg/18/zhangsan/') #传递一个不存在的视图函数 则报错
#带参数的路由
# @app.route('/arg/<int:age>/')
@app.route('/arg/<int:age>/<name>/')
def arg(age,name):
return 'age的值为{}'.format(age)
蓝本之间的跳转
manage.py
import user #导入user蓝本对象
from car import car
#注册user蓝本
# app.register_blueprint(user.user)
#给当前的蓝本起前缀名称
app.register_blueprint(user.user,url_prefix='/user')
app.register_blueprint(car)
car.py
from flask import Blueprint,redirect,url_for
car = Blueprint('car',__name__)
@car.route('/show/')
def show():
# return '查看购物车'
return redirect(url_for('user.login'))
user.py
from flask import Blueprint #导入蓝本
#第一个user 因为当前是关于用户处理的蓝本 顾名思义 所有叫user user是给当前所有的视图添加装饰器来用的
user = Blueprint('user',__name__)
@user.route('/login/')
def login():
return '欢迎登录'
@user.route('/logout/')
def logout():
return '退出登录'
四、请求钩子函数
概述: 类似django的中间件
manage.py中
钩子函数 | 功能描述 |
---|---|
before_first_request | 第一次请求之前 |
before_request | 每次请求之前 |
after_request | 请求之后 没有异常 |
teardown_request | 请求之后 即使有异常出现 |
实例
#请求钩子函数
@app.before_first_request
def before_first_request():
print('before_first_request')
#每次请求之前
@app.before_request
def before_request():
# print(request.method)
# print(request.path)
if request.path == '/check_form/' and request.method == 'GET':
abort(500)
print('before_request')
#请求之后
@app.after_request
def after_request(res):
print('after_request')
return res
#请求之后
@app.teardown_request
def teardown_request(res):
print('teardown_request')
return res
在蓝本中
钩子函数 | 功能描述 |
---|---|
before_app_first_request | 第一次请求之前 |
before_app_request | 每次请求之前 |
after_app_request | 请求之后 没有异常 |
teardown_app_request | 请求之后 即使有异常出现 |
实例
#请求钩子函数
@car.before_app_first_request
def before_first_request():
print('before_first_request')
#每次请求之前
@car.before_app_request
def before_request():
if request.path == '/check_form/' and request.method == 'GET':
abort(500)
print('before_request')
#请求之后
@car.after_app_request
def after_request(res):
print('after_request')
return res
#请求之后
@car.teardown_app_request
def teardown_request(res):
print('teardown_request')
return res
五、模板引擎
概念:
模板文件就是按照一定的规则进行替换 负责展示效果的html文件
模板引擎:jinja2
(1) 创建模板目录
templates
(2) 模板的渲染
导入
from flask render_template,render_template_string
render_template
render_template_string