Session¶
WeRoBot 0.4.0 中增加了功能强大的 Session 系统,你可以通过 Session 轻松实现用户状态的记录,享受如同 Web 开发般的便捷。
一个简单的使用 Session 的 Demo
robot = werobot.WeRoBot(token=werobot.utils.generate_token(),
enable_session=True)
@robot.text
def first(message, session):
if 'last' in session:
return
session['last'] = message.content
return message.content
robot.run()
开启 Session¶
想要开启 Session ,在实例化 WeRoBot
的时候需要传入 enable_session
和 session_storage
两个参数:
enable_session
: 必须为 True (打开 Session )session_storage
: 可选,一个 Session Storage 实例。默认是werobot.session.filestorage.FileStorage
。
修改 Handler 以使用 Session¶
没有打开 Session 的时候,一个标准的 WeRoBot Handler 应该是这样的
@robot.text
def hello(message):
return "Hello!"
而在打开 Session 之后, 这个 Handler 需要修改为接受第二个参数: session
@robot.text
def hello(message, session):
count = session.get("count", 0) + 1
session["count"] = count
return "Hello! You have sent %s messages to me" % count
传入的 session
参数是一个标准的 Python 字典。
在修改完 Handler 之后, 你的微信机器人就拥有 Session 系统了 :)
可用的 Session Storage¶
-
class
werobot.session.filestorage.
FileStorage
(filename='werobot_session')¶ FileStorage 会把你的 Session 数据以 dbm 形式储存在文件中。
参数: filename – 文件名, 默认为 werobot_session
-
class
werobot.session.mongodbstorage.
MongoDBStorage
(collection)¶ MongoDBStorage 会把你的 Session 数据储存在一个 MongoDB Collection 中
import pymongo import werobot from werobot.session.mongodbstorage import MongoDBStorage collection = pymongo.MongoClient()["wechat"]["session"] session_storage = MongoDBStorage(collection) robot = werobot.WeRoBot(token="token", enable_session=True, session_storage=session_storage)
你需要安装
pymongo
才能使用 MongoDBStorage 。参数: collection – 一个 MongoDB Collection。
-
class
werobot.session.redisstorage.
RedisStorage
(redis, prefix='ws_')¶ RedisStorage 会把你的 Session 数据储存在 Redis 中
import redis import werobot from werobot.session.redisstorage import RedisStorage db = redis.Redis() session_storage = RedisStorage(db, prefix="my_prefix_") robot = werobot.WeRoBot(token="token", enable_session=True, session_storage=session_storage)
你需要安装
redis
才能使用 RedisStorage 。参数: - redis – 一个 Redis Client。
- prefix – Reids 中 Session 数据 key 的 prefix 。默认为
ws_
-
class
werobot.session.saekvstorage.
SaeKVDBStorage
(prefix='ws_')¶ SaeKVDBStorage 使用SAE 的 KVDB 来保存你的session
import werobot from werobot.session.saekvstorage import SaeKVDBStorage session_storage = SaeKVDBStorage() robot = werobot.WeRoBot(token="token", enable_session=True, session_storage=session_storage)
需要先在后台开启 KVDB 支持
参数: prefix – KVDB 中 Session 数据 key 的 prefix 。默认为 ws_
-
class
werobot.session.sqlitestorage.
SQLiteStorage
(filename='werobot_session.sqlite3')¶ SQLiteStorge 会把 Session 数据储存在一个 SQLite 数据库文件中
import werobot from werobot.session.sqlitestorage import SQLiteStorage session_storage = SQLiteStorage robot = werobot.WeRoBot(token="token", enable_session=True, session_storage=session_storage)
参数: filename – SQLite数据库的文件名, 默认是 werobot_session.sqlite3
。