【问题标题】:Encoding id and storing it as a unique code and store in table on creation of row编码 id 并将其存储为唯一代码并在创建行时存储在表中
【发布时间】:2016-10-22 21:35:27
【问题描述】:

本质上,我试图消除向用户显示“列表”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 模板本身中看不到编码/解码 id 的方法......有吗?)

我最终希望将唯一代码存储在数据库中,但是当我创建该列表本身并且不知道如何根据列表的 id 创建 hashid 时,我感到困惑身份证。

我目前正在创建这样的列表:

form = request.form
models.Listing.create(
    title = form['title'],
    description = form['description'],
    price = form['price']
)

我计划稍后将其与 WTForms 一起使用进行验证。

在不知道 id 本身的情况下,我最好如何在创建列表时包含唯一代码???

非常感谢任何帮助!!! ??? ??? ????

【问题讨论】:

  • 我猜你正在为你的模型使用 peewee?如果 peewee 支持基于类的模型,您可以将函数/属性用于模型本身的 hashid。否则你也可以在我认为的 jinja 模板中注入函数。

标签: python flask jinja2 peewee flask-peewee


【解决方案1】:

Listing 模型中,您可以定义如下函数:

def getHashId(self):
    return hashid.encode(self.id)

现在,您可以在 Jinja2 模板中使用Listing 实例的任何位置调用listing.getHashId() 以返回与相关列表匹配的哈希值。这样,您也不需要将 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多