Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

python flask cara meneruskan parameter dinamis ke dekorator

Jika kita memeriksa dokumen untuk aplikasi flask global, flask.g , katanya:

Untuk berbagi data yang valid untuk satu permintaan hanya dari satu fungsi ke fungsi lainnya, variabel global tidak cukup baik karena akan rusak di lingkungan berulir. Flask memberi Anda objek khusus yang memastikannya hanya valid untuk permintaan aktif dan itu akan mengembalikan nilai yang berbeda untuk setiap permintaan.

Ini dicapai dengan menggunakan proxy thread-local (di flask/globals.py ):

g = LocalProxy(partial(_lookup_app_object, 'g'))

Hal lain yang harus kita ingat adalah bahwa Python mengeksekusi pass pertama dari dekorator kita selama fase "kompilasi", di luar permintaan apa pun, atau flask aplikasi. Itu artinya key argumen mendapatkan nilai 'shop_{}_style'.format(g.city.id) ketika aplikasi Anda dimulai (ketika kelas Anda sedang diurai/dihias), di luar flask konteks permintaan.

Tetapi kita dapat dengan mudah menunda akses ke flask.g dengan menggunakan proxy malas, yang mengambil nilai hanya saat digunakan, melalui fungsi panggilan balik. Mari kita gunakan yang sudah dibundel dengan flask , werkzeug.local.LocalProxy :

from werkzeug.local import LocalProxy

class ShopAreaAndStyleListAPI(Resource):
    @redis_hash_shop_style(key=LocalProxy(lambda: 'shop_{}_style'.format(g.city.id)))
    def get(self):
        # if not found from redis, query from mysql
        pass

Secara umum (untuk non-flask atau non-werkzeug apps), kita dapat menggunakan LazyProxy yang serupa dari ProxyTypes paket.

Tidak terkait dengan ini, Anda juga ingin memperbaiki redis_hash_shop_style Anda dekorator untuk tidak hanya mengambil dari redis , tetapi juga memperbarui (atau membuat) nilai jika basi (atau tidak ada), dengan memanggil f() yang dibungkus bila perlu.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Praktik Terbaik untuk Meningkatkan Redis dengan Sentinel?

  2. Menyalahgunakan cURL untuk berkomunikasi dengan Redis

  3. Temukan kunci berdasarkan nilai

  4. Bagaimana cara menyimpan kumpulan objek yang diurutkan dalam redis?

  5. Apa tujuan dari titik dua dalam kunci Redis