Вы можете использовать библиотеку hashids
для кодирования и декодирования целочисленных идентификаторов.Во-первых, 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
Затем создайте глобальную переменную среды, чтобы вы могли вызывать функцию create_hashid из шаблона jinja2:
# 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>
Наконец, ваша функция просмотра:
# 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
)
Источник: Эта статья была источником для этих инструкций.