@pcdesign

Как подружить во Flask два модуля: Flask-Mobility и Flask-Cache?

Есть у Flask два замечательных модуля:
Flask-Cache - кеширует, помещая в мемкеш отрендеренную страничку.
Flask-Mobility - выдает мобильную версию для мобильных устройств.

Вот собственно, код:
from flask import Flask, render_template
from flask.ext.cache import Cache                                                
from flask.ext.mobility import Mobility                                          
from flask.ext.mobility.decorators import mobile_template   

app = Flask(__name__)                                                            
Mobility(app)  
cache = Cache(app, config={'CACHE_TYPE': 'memcached',                            
                          "CACHE_MEMCACHED_SERVERS": ['192.168.1.100:11211']})


@app.route('/')                                                                  
@cache.cached(50)                                                             
@mobile_template('{mobile/}index.html')     
def index(template):                                                             
    return render_template(template) 

if __name__ == '__main__':                                                       
    app.run()


Кеширует, но как ему заблагорассудится.
То мобильную версию в кеш засунет и вернет обычным десктопным браузерам.
А то наоборот.

Как сделать, чтобы он корректно кешировал две версии и для мобил и для десктопов?
  • Вопрос задан
  • 2730 просмотров
Решения вопроса 1
crazyzubr
@crazyzubr
Python backend-developer
Декоратор @cache.cached ничего не знает о декораторе @mobile_template.
Как один из вариантов можно создать собственную функцию для формирования префикса для ключа.

def mobile_key_prefix():
    return '%s/%s' % (is_mobile(request), request.path)

@cache.cached(timeout=50, key_prefix=mobile_key_prefix)


Здесь я указал функцию is_mobile(request) - она должна возвращать соответственно разные строки для мобильных и для десктопов. Так ключ будет отличатся, и будут отображаться верные данные.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы