编码 id 并将其存储为唯一代码并在创建行时存储在 table 中
Encoding id and storing it as a unique code and store in table on creation of row
本质上,我试图消除向用户显示 'listing' 的 ID 的需要。我正在使用 Hashids 将自动创建的 ID 编码为唯一代码。
为了显示单个列表,我目前正在这样做:
@app.route('/listing/<uniqueHash>')
def listing(uniqueHash):
a = hashids.decode(uniqueHash)
listing = models.Listing.select().where( models.Listing.id == a ).get()
uniqueHash = hashids.encode(listing.id)
return render_template("test1.html", listing = listing, uniqueHash = uniqueHash)
这对于单个列表来说效果很好。但是,如果我想像这样显示多个列表:
@app.route('/')
def index():
listings = models.Listing.select().limit(100)
return render_template("test.html", listings = listings)
然后我无法为 jinja2 模板提供每个列表的唯一 ID(并且在 jinja 模板本身中看不到 encode/decode id 的方法......是吗?)
我最终想将唯一代码存储在数据库中,但是我对如何创建 hashid 感到困惑 - 基于列表的 id - 当我创建该列表本身而不是知道id。
我目前正在创建这样的列表:
form = request.form
models.Listing.create(
title = form['title'],
description = form['description'],
price = form['price']
)
我计划稍后将其与 WTForms 一起用于验证。
在不知道 ID 本身的情况下,我如何最好地在创建列表时包含唯一代码???
非常感谢任何帮助!!!
在您的 Listing
模型中,您可以定义一个函数,例如:
def getHashId(self):
return hashid.encode(self.id)
现在,在您使用 Listing
实例的 Jinja2 模板中的任何位置,您都可以调用 listing.getHashId()
到 return 匹配相关列表的 hashid。这样,你也不需要将hashid存储在数据库中。
然后您可以将 listing
函数简化为如下所示:
@app.route('/listing/<uniqueHash>')
def listing(uniqueHash):
try:
listing = models.Listing.select().where(models.Listing.id == hashid.decode(uniqueHash).get())
return render_template("test1.html", listing=listing)
except:
#Listing with that uniqueHash does not exist
本质上,我试图消除向用户显示 'listing' 的 ID 的需要。我正在使用 Hashids 将自动创建的 ID 编码为唯一代码。
为了显示单个列表,我目前正在这样做:
@app.route('/listing/<uniqueHash>')
def listing(uniqueHash):
a = hashids.decode(uniqueHash)
listing = models.Listing.select().where( models.Listing.id == a ).get()
uniqueHash = hashids.encode(listing.id)
return render_template("test1.html", listing = listing, uniqueHash = uniqueHash)
这对于单个列表来说效果很好。但是,如果我想像这样显示多个列表:
@app.route('/')
def index():
listings = models.Listing.select().limit(100)
return render_template("test.html", listings = listings)
然后我无法为 jinja2 模板提供每个列表的唯一 ID(并且在 jinja 模板本身中看不到 encode/decode id 的方法......是吗?)
我最终想将唯一代码存储在数据库中,但是我对如何创建 hashid 感到困惑 - 基于列表的 id - 当我创建该列表本身而不是知道id。
我目前正在创建这样的列表:
form = request.form
models.Listing.create(
title = form['title'],
description = form['description'],
price = form['price']
)
我计划稍后将其与 WTForms 一起用于验证。
在不知道 ID 本身的情况下,我如何最好地在创建列表时包含唯一代码???
非常感谢任何帮助!!!
在您的 Listing
模型中,您可以定义一个函数,例如:
def getHashId(self):
return hashid.encode(self.id)
现在,在您使用 Listing
实例的 Jinja2 模板中的任何位置,您都可以调用 listing.getHashId()
到 return 匹配相关列表的 hashid。这样,你也不需要将hashid存储在数据库中。
然后您可以将 listing
函数简化为如下所示:
@app.route('/listing/<uniqueHash>')
def listing(uniqueHash):
try:
listing = models.Listing.select().where(models.Listing.id == hashid.decode(uniqueHash).get())
return render_template("test1.html", listing=listing)
except:
#Listing with that uniqueHash does not exist