作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的目标非常简单,我创建了一条接收 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。如何散列路由或部分散列路由?
这条路由会收到一个叫做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/
我是一名优秀的程序员,十分优秀!