跳转到主要内容

Muffin框架的基于Cookie的HTTP会话

项目描述

Muffin-Session – 为 Muffin 框架提供的基于Cookie的HTTP会话

Tests Status PYPI Version Python Versions

功能

  • 支持base64会话

  • 支持JWT签名会话

  • 支持Fernet加密会话

要求

  • python >= 3.9

安装

Muffin-Session 应使用pip安装

pip install muffin-session

# Optional extras
pip install muffin-session[fernet]

使用

  1. 手动使用

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')
  1. 自动管理会话(使用中间件)

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 许可证.

项目详情


下载文件

下载适合您平台的应用文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分布

muffin_session-2.5.0.tar.gz (5.6 kB 查看哈希值

上传时间

构建分布

muffin_session-2.5.0-py3-none-any.whl (5.7 kB 查看哈希值

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面