flask二:路由
一.旧的路由方式
解决循环引用:views.py文件中传入app实例,def init_route(app)
使用懒加载的方法:使用函数调用的形式进行加载,创建app时加载路由(执行init_route(app)),把 他们包装在def create_app()
目录结构:
入口:manage.py(原来的app.py)
from flask_script import Manager from application import create_app app = create_app() manager = Manager(app) if __name__ == '__main__': manager.run()
项目application中创建app实例,application/__init__.py
from flask import Flask from application.views import init_route def create_app(): app = Flask(__name__) init_route(app) return app
项目application中创建路由,application/views.py
def init_route(app): @app.route("/") def hello_world(): return "Hello World" @app.route("/hi") def hi(): return "Hi"
二.新的路由加载:蓝图
官方文档:https://flask.palletsprojects.com/en/0.12.x/blueprints/
安装蓝图插件:pip install flask-blueprint
蓝图与方式一,相同点:入口(manage.py)和创建app的方法(还是在application的__init__.py文件中定义app)不变,目录结构不变
不同点:
路由定义改变为:@app.route("/") -->@blue.route("/")
路由加载(注册)改变为:init_route(app) --->改为:app.register_blueprint(second_blue)
#application/__init__.py from flask import Flask # from application.views import init_route from application.views import first_blue, second_blue def create_app(): app = Flask(__name__) # init_route(app) app.register_blueprint(first_blue) # app.add_url_rule("/first", endpoint='index') app.register_blueprint(second_blue) # app.add_url_rule("/second", endpoint='index') return app
#application/views.py from flask import Blueprint # def init_route(app): # # @app.route("/") # def hello_world(): # return "Hello World" # # @app.route("/hi") # def hi(): # return "Hi" first_blue = Blueprint('first_blue', __name__) @first_blue.route("/") def hello_world(): return "Hello World" @first_blue.route("/hi") def hi(): return "Hi" second_blue = Blueprint('second_blue', __name__) @second_blue.route("/two") def two(): return "two"
三.路由属性
1.路由参数
@first_blue.route("/userlist/") def user_list(): user = User() user.username = 'jerry' user.save() return "add user success" @first_blue.route("/user/<uid>/") def users(uid): print(uid) return "user id %d" % uid @first_blue.route("/user_id/<int:user_id>/") def get_user_id(user_id): print(user_id) return "user id %d" % user_id @first_blue.route("/user_token/<string:token>/") def get_user_token(token): pass @first_blue.route("/user_address/<path:address>/") def get_user_address(address): pass @first_blue.route("/get_uuid/<uuid:uu>/") def get_uuid(uu): pass @first_blue.route("/get_any/<any(a, b):an>/") def get_any(an): pass
2.请求方法
默认支持GET、HEAD、OPTIONS
@first_blue.route("/user_list/<int:uid>/", methods=['GET', 'POST']) def get_user_list(uid): # return redirect('/userlist/') # return redirect(url_for('first_blue.userlist')) return redirect(url_for('first_blue.user_id', user_id=uid))
posted on 2020-06-18 19:28 myworldworld 阅读(152) 评论(0) 收藏 举报