Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9d02429aee | |||
| 13fcc653c6 | |||
| 16fb57d62a | |||
| 43956f045f | |||
| cdd237b5f9 |
@@ -16,7 +16,7 @@ $ pipenv install quart-session
|
|||||||
$ pip install quart-session
|
$ pip install quart-session
|
||||||
```
|
```
|
||||||
|
|
||||||
and requires Python 3.7.0 or higher. A fairly minimal Quart-Session example is,
|
and requires Python 3.7.0 or higher. A minimal Quart-Session example is:
|
||||||
|
|
||||||
```python3
|
```python3
|
||||||
from quart import Quart, session
|
from quart import Quart, session
|
||||||
@@ -29,7 +29,11 @@ Session(app)
|
|||||||
@app.route('/')
|
@app.route('/')
|
||||||
async def hello():
|
async def hello():
|
||||||
session["foo"] = "bar"
|
session["foo"] = "bar"
|
||||||
return 'hello'
|
return "session key 'foo' set"
|
||||||
|
|
||||||
|
@app.route('/foo')
|
||||||
|
async def foo():
|
||||||
|
return session.get("foo", "session key 'foo' not found")
|
||||||
|
|
||||||
app.run()
|
app.run()
|
||||||
```
|
```
|
||||||
@@ -37,9 +41,9 @@ app.run()
|
|||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
|
||||||
### Redis support
|
### Redis
|
||||||
|
|
||||||
via `aioredis`.
|
via `aioredis>=2.0.0`.
|
||||||
|
|
||||||
```python3
|
```python3
|
||||||
app = Quart(__name__)
|
app = Quart(__name__)
|
||||||
@@ -47,8 +51,16 @@ app.config['SESSION_TYPE'] = 'redis'
|
|||||||
Session(app)
|
Session(app)
|
||||||
```
|
```
|
||||||
|
|
||||||
If you already have a `aioredis.Client` instance and you'd like to share
|
By default, Quart-session connects to Redis at `127.0.0.1:6379`. If you
|
||||||
it with the session interface,
|
have a different location, use `SESSION_URI`
|
||||||
|
|
||||||
|
```python3
|
||||||
|
app = Quart(__name__)
|
||||||
|
app.config['SESSION_TYPE'] = 'redis'
|
||||||
|
app.config['SESSION_URI'] = 'redis://:password@localhost:6379'
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternatively, for extra control, you may provide your own `aioredis.Client` instance altogether.
|
||||||
|
|
||||||
```python3
|
```python3
|
||||||
app = Quart(__name__)
|
app = Quart(__name__)
|
||||||
@@ -56,15 +68,17 @@ app.config['SESSION_TYPE'] = 'redis'
|
|||||||
|
|
||||||
@app.before_serving
|
@app.before_serving
|
||||||
async def setup():
|
async def setup():
|
||||||
cache = await aioredis.create_redis_pool(...)
|
cache = await aioredis.Redis(
|
||||||
|
host="foobar.com",
|
||||||
|
port=6379,
|
||||||
|
password="foobar"
|
||||||
|
)
|
||||||
|
|
||||||
app.config['SESSION_REDIS'] = cache
|
app.config['SESSION_REDIS'] = cache
|
||||||
Session(app)
|
Session(app)
|
||||||
```
|
```
|
||||||
|
|
||||||
By default, Quart-session creates a single connection to Redis, while
|
#### Trio
|
||||||
the example above sets up a connection pool.
|
|
||||||
|
|
||||||
#### Trio support
|
|
||||||
|
|
||||||
Quart-Session comes with [an (experimental) Redis client](quart_session/redis_trio) for use with the [Trio](https://trio.readthedocs.io/en/stable/) eventloop.
|
Quart-Session comes with [an (experimental) Redis client](quart_session/redis_trio) for use with the [Trio](https://trio.readthedocs.io/en/stable/) eventloop.
|
||||||
|
|
||||||
@@ -77,7 +91,7 @@ app.config['SESSION_TYPE'] = 'redis'
|
|||||||
Session(app)
|
Session(app)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Memcached support
|
### Memcached
|
||||||
|
|
||||||
via `aiomcache`.
|
via `aiomcache`.
|
||||||
|
|
||||||
|
|||||||
@@ -224,12 +224,14 @@ class RedisSessionInterface(SessionInterface):
|
|||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Creates a single Redis connection, you might prefer
|
Creates a single Redis connection, you might prefer
|
||||||
pooling instead (see ``aioredis.Redis.create_redis_pool``)
|
pooling instead (see the `aioredis` documentation
|
||||||
|
for connection pool examples).
|
||||||
"""
|
"""
|
||||||
if self.backend is None:
|
if self.backend is None:
|
||||||
import aioredis
|
import aioredis
|
||||||
|
uri = app.config.get('SESSION_URI', 'redis://localhost')
|
||||||
self.backend = await aioredis.from_url(
|
self.backend = await aioredis.from_url(
|
||||||
"redis://localhost", encoding="utf-8", decode_responses=True
|
uri, encoding="utf-8", decode_responses=True
|
||||||
)
|
)
|
||||||
|
|
||||||
async def get(self, key: str, app: Quart = None):
|
async def get(self, key: str, app: Quart = None):
|
||||||
|
|||||||
Reference in New Issue
Block a user