Muffin框架的基于Cookie的HTTP会话
项目描述
Muffin-Session – 为 Muffin 框架提供的基于Cookie的HTTP会话
功能
支持base64会话
支持JWT签名会话
支持Fernet加密会话
要求
python >= 3.9
安装
Muffin-Session 应使用pip安装
pip install muffin-session # Optional extras pip install muffin-session[fernet]
使用
手动使用
from muffin import Application, ResponseHTML
from muffin_session import Plugin as Session
# Create Muffin Application
app = Application('example')
# Initialize the plugin
# As alternative: session = Session(app, **options)
session = Session()
session.setup(app, secret_key='REALLY_SECRET_KEY_FOR_SIGN_YOUR_SESSIONS')
# Use it inside your handlers
@app.route('/update')
async def update_session(request):
ses = session.load_from_request(request)
ses['var'] = 'value'
response = ResponseHTML('Session has been updated')
session.save_to_response(ses, response)
return res
@app.route('/load')
async def load_session(request):
ses = session.load_from_request(request)
return ses.get('var')
自动管理会话(使用中间件)
from muffin import Application, ResponseHTML
from muffin_session import Plugin as Session
# Create Muffin Application
app = Application('example')
# Initialize the plugin
# As alternative: session = Session(app, **options)
session = Session()
session.setup(app, secret_key='REALLY_SECRET_KEY_FOR_SIGN_YOUR_SESSIONS', auto_manage=True)
# Use it inside your handlers
@app.route('/update')
async def update_session(request):
request.session['var'] = 'value'
return 'Session has been updated'
@app.route('/load')
async def load_session(request):
return request.session.get('var')
选项
名称 |
默认值 |
描述 |
session_type |
"jwt" |
会话类型(《base64|jwt|fernet》) |
secret_key |
"InsecureSecret" |
用于签名会话的秘密代码 |
auto_manage |
False |
自动加载/保存会话。会话将被加载到 request.session |
cookie_name |
"会话" |
会话的cookie名称(session) |
cookie_params |
会话的cookie参数({'path': '/', 'max-age': None, 'samesite': 'lax', 'secure': False}) |
|
default_user_checker |
lambda x: True |
用于检查已登录用户的函数 |
login_url |
"/login" |
重定向匿名用户的URL(它可能是一个接受 Request 并返回字符串的函数) |
您可以在初始化插件时提供这些选项
session.setup(app, secret_key='123455', cookie_name='info')
或者,使用 SESSION_ 前缀在 Muffin.Application 配置中设置
SESSION_SECRET_KEY = '123455'
SESSION_COOKIE_NAME = 'info'
Muffin.Application 配置选项不区分大小写
示例
from muffin import Application, ResponseHTML
from muffin_session import Plugin as Session
# Create Muffin Application
app = Application('example')
# Initialize the plugin
# As alternative: session = Session(app, **options)
session = Session()
session.setup(app, secret_key='REALLY_SECRET_KEY_FOR_SIGN_YOUR_SESSIONS', auto_manage=True)
@session.user_loader
async def load_user(ident):
"""Define your own user loader. """
return await my_database_load_user_by_id(ident)
@app.register('/session')
async def get_session(request):
""" Load session and return it as JSON. """
return dict(request.session)
@app.register('/admin')
@session.user_pass(lambda user: user.is_admin)
async def admin(request):
"""Awailable for admins only. """
return 'TOP SECRET'
@app.register('/login')
async def login(request):
"""Save user id into the current session. """
# ...
session.login(request, current_user.pk)
return 'OK'
@app.register('/logout')
async def logout(request):
""" Logout user. """
# ...
session.logout(request)
return 'OK'
@app.register('/somewhere')
async def somewhere(request):
""" Do something and leave a flash message """
# ...
request.session.clear()
return 'OK'
错误跟踪器
如果您有任何建议、错误报告或不满,请向 https://github.com/klen/muffin-session/issues 的问题跟踪器报告
贡献
Muffin-Session 的开发发生在:https://github.com/klen/muffin-session
贡献者
klen(Kirill Klenov)
许可证
许可协议:MIT 许可证.