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)    收藏  举报

导航