2015-01-15 2 views
0

내 응용 프로그램의 모든 페이지에서 최근에 검색된 용어 (데이터베이스에 저장 됨)를 표시하는 데 관심이 있습니다. 언뜻보기에 layout.html이이 기능을위한 최고의 장소가 될 것 같습니다. 데이터베이스 쿼리를 실행해야하는데 다음과 같이 보일 것입니다.Web2py : layout.html 내의 데이터베이스 쿼리

{{import pymongo}} 
{{db = pymongo.MongoClient()}} 
{{result = db.collection.distinct("search_term")}} 
{{etc...}} 

확실한 생각이 아닙니다. 보안면에서 뷰에서 데이터베이스 쿼리를 실행해야합니까? 다른 대안이 있습니까?

답변

2

서버에서보기가 실행되므로 보안 문제는 없습니다. 그러나 더 나은 방법은 해당 코드를 모델 파일로 이동 한 다음 레이아웃에 결과를 단순히 표시하는 것입니다 (모델 파일에 정의 된 모든 객체는 뷰의 실행 환경에서 사용할 수 있습니다). layout.html에서

import pymongo 
db = pymongo.MongoClient() 
result = db.collection.distinct("search_term") 

그리고 :

모델 파일에서

{{for record in result:}} 
[code to display record] 
{{pass}} 

또 다른 옵션 모듈에 코드를 이동하고 간단하게 가져오고있는 함수를 호출하는 것입니다 레이아웃 (아이디어는 뷰를 디스플레이 관련 코드로만 제한하는 것, 특히보기에서 파이썬 코드를 읽고 디버그하는 것이 조금 어렵 기 때문에).

+0

아, 전화하세요. 나는 이미 db.py에서 비슷한 것을하고있다. 그러나 어떤 이유로 그것도 거기에 넣지 않았다. 그럼에도 불구하고이 유형의 구현에는 추가적인 보안 문제가 없습니다. – datasci