Flask 路由

Flask 路由的两种方式

路由系统常用方式

@app.route('/user/<username>')
@app.route('/post/<int:post_id>')
@app.route('/post/<float:post_id>')
@app.route('/post/<path:path>')
@app.route('/login', methods=['GET', 'POST'])

常用路由系统有以上五种,所有的路由系统都是基于一下对应关系来处理:
DEFAULT_CONVERTERS = {
    'default':          UnicodeConverter,
    'string':           UnicodeConverter,
    'any':              AnyConverter,
    'path':             PathConverter,
    'int':              IntegerConverter,
    'float':            FloatConverter,
    'uuid':             UUIDConverter,
}

示例

from flask import Flask, render_template

app = Flask(__name__)
# 配置文件
# app.config.from_object('settings.DevelopmentConfig')

'''
# 路由方式
1.执行decorator = app.route('/index', methods=['GET', 'POST'])
2.@decorator
    - decorator(index)
'''

# 路由方式一(常用)
@app.route('/index', methods=['GET', 'POST'])
def index():
    return 'index'


# 路由方式二(不常用)
def order():
    return 'order'


app.add_url_rule('/order', view_func=order)

if __name__ == '__main__':
    app.run()

Flask 别名与反向生成url

from flask import Flask, url_for

app = Flask(__name__)

'''
https://www.cnblogs.com/wupeiqi/articles/7552008.html
url_for: 反向生成url
endpoint: 起别名

注意只有别名较长的情况下去起别名方便
不起别名默认是函数名字
'''


@app.route('/index', methods=['GET', 'POST'], endpoint='n1')
def index():
    v1 = url_for('n1')
    v2 = url_for('n2')
    v3 = url_for('n3')
    print(v1, v2, v3)
    return 'index'


@app.route('/login', methods=['GET', 'POST'], endpoint='n2')
def index():
    return 'login'


@app.route('/logout', methods=['GET', 'POST'], endpoint='n3')
def index():
    return 'logout'


if __name__ == '__main__':
    app.run()

转化器

from flask import Flask

app = Flask(__name__)

'''
https://www.cnblogs.com/wupeiqi/articles/7552008.html
默认常用url转换器
'''


@app.route('/index/<int:nid>', methods=['GET', 'POST'])
def index(nid):
    print(nid)
    return 'index'


if __name__ == '__main__':
    app.run()

自定义转换器

from flask import Flask, url_for
from werkzeug.routing import BaseConverter

app = Flask(__name__)

'''
自定义正则匹配
'''


class RegexConverter(BaseConverter):
    """
    自定义URL匹配正则表达式
    """

    def __init__(self, map, regex):
        super(RegexConverter, self).__init__(map)
        self.regex = regex

    def to_python(self, value):
        """
        路由匹配时,匹配成功后传递给视图函数中参数的值
        :param value:
        :return:
        """
        return int(value)

    def to_url(self, value):
        """
        使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
        :param value:
        :return:
        """
        val = super(RegexConverter, self).to_url(value)
        return val


# 添加到自定义转换器添加
app.url_map.converters['xxx'] = RegexConverter


@app.route('/index/<xxx("\d+"):nid>', methods=['GET', 'POST'])
def index(nid):
    print(nid, type(nid))
    v = url_for('index', nid=nid)
    print(v)
    return 'index'


if __name__ == '__main__':
    app.run()

重定向url

from flask import Flask

app = Flask(__name__)

'''
redirect_to 重定向url
'''


@app.route('/login', methods=['GET', 'POST'], redirect_to='/new')
def login():
    return '旧登录'


@app.route('/new', methods=['GET', 'POST'])
def new():
    return '新登录'


if __name__ == '__main__':
    app.run()  

子域名

from flask import Flask

'''
subdomain 子域名
'''

app = Flask(__name__)
app.config['SERVER_NAME'] = 'example.com'


@app.route("/", subdomain="<username>")
def index(username):
    print(username)
    return 'xxxxxx'


if __name__ == '__main__':
    app.run()

flask装饰器的使用

from flask import Flask
from functools import wraps

app = Flask(__name__)


def wapper(func):
    @wraps(func)
    def inner(*args, **kwargs):
        print('before')
        return func(*args, **kwargs)

    return inner


@app.route('/index', methods=['GET', 'POST'])
@wapper
def index():
    return 'index'


@app.route('/order', methods=['GET', 'POST'])
@wapper
def order():
    return 'order'


if __name__ == '__main__':
    app.run()
posted @ 2023-09-06 10:11  沈忻凯  阅读(31)  评论(0)    收藏  举报