2016-06-21 10 views
0

본질적으로 사용자에게 '목록'의 ID를 표시 할 필요를 없애려고합니다. Hashids을 사용하여 자동 생성 된 ID를 고유 코드로 인코딩합니다. 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를 제공 할 수없는 (그리고에서/디코딩 ID를 인코딩하는 방법을 볼 수 없습니다 jinja 템플릿 자체가 있습니까?)

나는 데이터베이스에 고유 한 코드를 저장하고 싶지만 목록의 ID를 기반으로 해시드를 만드는 방법에 대해 혼란스러워합니다. 그 목록 자체를 만들고 그 이드를 모른다.

나는 현재이 같은 목록을 만드는거야 : 나는 검증을위한 WTForms 이것을 사용하는 것이 나중에 계획입니다

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

.

ID 자체를 알지 못하고 목록을 만드는 데 고유 코드를 포함시키는 것이 가장 좋습니다. 어떻게해야합니까 ???

도움을 주시면 대단히 감사하겠습니다 !!! 일치하는 hashid을 반환하려면 지금

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

, 어디서나 Listing의 인스턴스를 사용하여 Jinja2 템플릿, 당신은 listing.getHashId()를 호출 할 수 있습니다 : 당신의 Listing 모델 내에서

+1

나는 당신이 당신의 모델 peewee을 사용하는 것 같아요 :

그런 다음이 뭔가에 listing 기능을 단순화 할 수 있을까? peewee가 클래스 기반 모델을 지원하면 모델 자체에서 hashid에 대한 함수/속성을 사용할 수 있습니다. 그렇지 않으면 jinja 템플릿에 함수를 삽입 할 수도 있습니다. – syntonym

답변

1

, 당신은 같은 함수를 정의 할 수 있습니다 문제의 목록 이렇게하면 데이터베이스에 hashid를 저장할 필요가 없습니다.

@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