A nice way to use Redis in your Flask app
Project description
flask-redis
A nice way to use Redis in your Flask app.
Configuration
Start by installing the extension with pip install flask-redis.
Once that's done, configure it within your Flask config.
Set the URL of your Redis instance like this:
REDIS_URL = "redis://:password@localhost:6379/0"
If you wanna connect to a Unix socket,
you can specify it like "unix://:password@/path/to/socket.sock?db=0".
Usage
Setup
To add a Redis client to your application:
from flask import Flask
from flask_redis import FlaskRedis
app = Flask(__name__)
redis_client = FlaskRedis(app)
or if you prefer, you can do it the other way around:
redis_client = FlaskRedis(app)
def create_app():
app = Flask(__name__)
redis_client.init_app(app)
return app
Accessing Redis
The redis client you created above from FlaskRedis acts just like a regular Redis instance from the redis-py library:
from my_app import redis_client
@app.route('/')
def index():
return redis_client.get('potato')
For detailed instructions on what methods you can use on the client, as well as how you can use advanced features such as Lua scripting, pipelines, and callbacks, please check the redis-py documentation.
Pro-tip: The redis-py
package uses the redis namespace, so it's nicer to name your Redis object something like redis_client instead of just redis.
Extra features in flask-redis
Custom providers
Instead of the default Redis client from redis-py,
you can provide your own.
This can be useful to replace it with mockredis for testing:
from flask import Flask
from flask_redis import FlaskRedis
from mockredis import MockRedis
def create_app():
app = Flask(__name__)
if app.testing:
redis_store = FlaskRedis.from_custom_provider(MockRedis)
else:
redis_store = FlaskRedis()
redis_store.init_app(app)
return app
Contributing
- Check for open issues or open a fresh issue to start a discussion
- Fork the repository on GitHub.
- Send a pull request with your code!
Merging will require a test which shows that the bug was fixed, or that the feature works as expected. Feel free to open a draft pull request though without such a test and ask for help with writing it if you're not sure how to.
As Bence (the only maintainer) works full-time, please allow some time before your issue or pull request is handled.
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
0.4.0 (2019-05-29)
- Reorganized the module and rewrote everything other than the library code, mainly packaging and CI. There are no user-facing changes in behavior.
0.3.0 (2016-07-18)
- Backwards incompatible: The
FlaskRedis.init_appmethod no longer takes astrictparameter. Pass this flag when creating yourFlaskRedisinstance, instead. - Backwards incompatible: The extension will now be registered
under the (lowercased) config prefix of the instance. The default
config prefix is
'REDIS', so unless you change that, you can still access the extension viaapp.extensions['redis']as before. - Backwards incompatible: The default class has been changed to
redis.StrictRedis. You can switch back to the oldredis.Redisclass by specifyingstrict=Falsein theFlaskRediskwargs. - You can now pass all supported
Rediskeyword arguments (such asdecode_responses) toFlaskRedisand they will be correctly passed over to theredis-pyinstance. Thanks, @giyyapan! - Usage like
redis_store['key'] = value,redis_store['key'], anddel redis_store['key']is now supported. Thanks, @ariscn!
0.2.0 (2015-04-15)
- Made 0.1.0's deprecation warned changes final
0.1.0 (2015-04-15)
- Deprecation: Renamed
flask_redis.Redistoflask_redis.FlaskRedis. Using the old name still works, but emits a deprecation warning, as it will be removed from the next version - Deprecation: Setting a
REDIS_DATABASE(or equivalent) now emits a deprecation warning as it will be removed in the version in favor of including the database number inREDIS_URL(or equivalent) - Added a
FlaskRedis.from_custom_provider(provider)class method for using any redis provider class that supports instantiation with afrom_urlclass method - Added a
strictparameter toFlaskRediswhich expects a boolean value and allows choosing between usingredis.StrictRedisandredis.Redisas the defualt provider. - Made
FlaskRedisregister as a Flask extension through Flask's extension API - Rewrote test suite in py.test
- Got rid of the hacky attribute copying mechanism in favor of using
the
__getattr__magic method to pass calls to the underlying client
0.0.6 (2014-04-09)
- Improved Python 3 Support (Thanks underyx!).
- Improved test cases.
- Improved configuration.
- Fixed up documentation.
- Removed un-used imports (Thanks underyx and lyschoening!).
0.0.5 (2014-02-17)
- Improved suppot for the config prefix.
0.0.4 (2014-02-17)
- Added support for config_prefix, allowing multiple DBs.
0.0.3 (2013-07-06)
- Added TravisCI Testing for Flask 0.9/0.10.
- Added Badges to README.
0.0.2 (2013-07-06)
- Implemented a very simple test.
- Fixed some documentation issues.
- Included requirements.txt for testing.
- Included task file including some basic methods for tests.
0.0.1 (2013-07-05)
- Conception
- Initial Commit of Package to GitHub.
Credits
The flask-redis project is written and maintained
by Bence Nagy (underyx).
The project was originally created by Rhys Elsmore, who maintained it until the 0.0.6 release in 2014. His work was licensed under the Apache 2 license. The project has gone through a full rewrite since, but his work was essential as inspiration. Thanks, Rhys!
A full list of contributors can be found on GitHub's Contributors page
or you can obtain it on your own by running git shortlog -sn.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flask-redis-0.4.0.tar.gz.
File metadata
- Download URL: flask-redis-0.4.0.tar.gz
- Upload date:
- Size: 9.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1fccc11e7ea35c2a4d68c0b9aa58226a098e45e834d615c7b6c4928b01ddd6c
|
|
| MD5 |
41a3f42ee360f53f9b78030af7683dfd
|
|
| BLAKE2b-256 |
b8d16e5a087e2fd99782451312dd467bbf5f9f64d999de900047dc0854a7d175
|
File details
Details for the file flask_redis-0.4.0-py2.py3-none-any.whl.
File metadata
- Download URL: flask_redis-0.4.0-py2.py3-none-any.whl
- Upload date:
- Size: 8.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d79eef4eb1217095edab603acc52f935b983ae4b7655ee7c82c0dfd87315d17
|
|
| MD5 |
76de72bbf395704b2d4395c0e9d36737
|
|
| BLAKE2b-256 |
9d9ccead8fff1c8da2bd31a83ec476c3364812ee74f3c7c3445d070555f681d1
|