gpt4 book ai didi

python - 如何在 Python Flask 中对路由进行哈希处理?

转载 作者:行者123 更新时间:2023-12-01 09:00:56 25 4
gpt4 key购买 nike

我的目标非常简单,我创建了一条接收 ID 的路线。

@app.route('/afbase/<int:pid>', methods=["GET", "PATCH", "DELETE"])
# We defined the page that will retrieve some info
def show(pid):
new_person = People.query.filter_by(pid=pid).first()

我不希望向最终用户显示此 ID。如何散列路由或部分散列路由?

current url screenshot

这条路由会收到一个叫做PID的变量,你可以看到,这个PID变量可以被认为是一个ID。不区分大小写,但不能显示在浏览器 URL 上。

我尝试使用 hashlib 但没有取得太大成功。

最佳答案

您可以使用hashids 库对整数ID 进行编码和解码。首先,pip install hashids。然后,创建一些实用函数。

# utils.py
from flask import current_app
from hashids import Hashids

def create_hashid(id):
    hashids = Hashids(min_length=5, salt=current_app.config['SECRET_KEY'])
    hashid = hashids.encode(id)
    return hashid

def decode_hashid(hashid):
    hashids = Hashids(min_length=5, salt=current_app.config['SECRET_KEY'])
    id = hashids.decode(hashid)
    return id

接下来,创建一个全局环境变量,以便您可以从 jinja2 模板调用 create_hashid 函数:

# app.py
from utils import create_hashid
app.jinja_env.globals.update(create_hashid=create_hashid)

以下是如何从模板中的链接调用该函数:

# index.html
<a href="{{ url_for('invoice.view_invoice', hashid=create_hashid(invoice.id) ) }}">View Invoice</a>

最后,你的 View 函数:

# views.py
@blueprint.route('/dashboard/invoice/<hashid>')
@login_required
def view_invoice(hashid):
    invoice_id = decode_hashid(hashid)
    invoice = Invoice.query.filter_by(
        user_id=current_user.id,
        id=invoice_id
    ).first_or_404()

return render_template(
    'dashboard/invoice/view_invoice.html',
    invoice=invoice
)

关于python - 如何在 Python Flask 中对路由进行哈希处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52461808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com