如何在Flask中创建友好的URL?

时间:2018-05-23 09:06:25

标签: python flask url-routing

如何在Flask中创建友好的URL?

路线中会写什么

/

用户已收到(Url由数据库中的类别构建)        / machines / cars / modern /雷克萨斯LX570

是否可以这样做以及如何写这个?

解决方法1:

重定向302

/product/<int:id_product> redirect to second route(get in databases) /machines/cars/modern/Lexus LX570

溶液2: 获取id产品和数据库的其他数据的三个url和一个函数

@app.route('/')
def index():
    #use function for get data in database

@app.route('/<productName>')
def product(productName):
    #use function for get data in database


@app.route('/<path:fullPath>/<productName>')
def product_with_categories(fullPath,productName):
    #use function for get data in database

1 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情:

from flask import make_response, url_for, redirect, abort

@app.route('/<int:id_product>')
def product(id_product):
    # Load you path with id_product to get nice url (in database)
    if id_product == 123:
        path = '/machines/cars/modern/Lexus LX570'
    else:
        abort(404)
    return redirect(url_for('product_friendly_url', product_category_hierarchy=path))

@app.route('/<path:product_category_hierarchy>')
def product_friendly_url(product_category_hierarchy):
    # Retrieve product from his product_category_hierarchy (in database)
    product_item = {'id': 123, 'product_category_hierarchy': product_category_hierarchy, 'blabla': 'test'}
    return make_response(str(product_item))

在您的浏览器中调用/123会将您重定向(302)到'/ machines / cars / modern / Lexus LX570'并打印:

{'id': 123, 'product_category_hierarchy': 'machines/cars/modern/Lexus LX570', 'blabla': 'test'}