pywebio.session — More control to session¶
-
pywebio.session.run_async(coro_obj)[源代码]¶ 异步运行协程对象。协程中依然可以调用 PyWebIO 交互函数。 仅能在 基于协程 的会话上下文中调用
- 参数
coro_obj – 协程对象
- 返回
An instance of
TaskHandleis returned, which can be used later to close the task.
-
pywebio.session.run_asyncio_coroutine(coro_obj)[源代码]¶ 若会话线程和运行事件的线程不是同一个线程,需要用 run_asyncio_coroutine 来运行asyncio中的协程。 仅能在 基于协程 的会话上下文中调用。
- 参数
coro_obj – 协程对象
-
pywebio.session.register_thread(thread: threading.Thread)[源代码]¶ 注册线程,以便在线程内调用 PyWebIO 交互函数。仅能在默认的基于线程的会话上下文中调用。
- 参数
thread (threading.Thread) – 线程对象
-
pywebio.session.defer_call(func)[源代码]¶ 设置会话结束时调用的函数。无论是用户主动关闭会话还是任务结束会话关闭,设置的函数都会被运行。 可以用于资源清理等工作。 在会话中可以多次调用
defer_call(),会话结束后将会顺序执行设置的函数。defer_call同样支持以装饰器的方式使用:@defer_call def cleanup(): pass
- 参数
func – 话结束时调用的函数
注意
通过
defer_call()设置的函数被调用时会话已经关闭,所以在函数体内不可以调用 PyWebIO 的交互函数
-
pywebio.session.hold()[源代码]¶ 保持会话,直到用户关闭浏览器, 此时函数抛出
SessionClosedException异常。注意⚠️:在 基于协程 的会话上下文中,需要使用
await hold()语法来进行调用。
-
pywebio.session.get_info()[源代码]¶ 获取当前会话的相关信息
- 返回
表示会话信息的对象,属性有:
user_agent: 表示用户浏览器信息的对象,属性有is_mobile(bool): 用户使用的设备是否为手机 (比如 iPhone, Android phones, Blackberry, Windows Phone 等设备)is_tablet(bool): 用户使用的设备是否为平板 (比如 iPad, Kindle Fire, Nexus 7 等设备)is_pc(bool): 用户使用的设备是否为桌面电脑 (比如运行 Windows, OS X, Linux 的设备)is_touch_capable(bool): 用户使用的设备是否支持触控browser.family(str): 浏览器家族. 比如 ‘Mobile Safari’browser.version(tuple): 浏览器版本元组. 比如 (5, 1)browser.version_string(str): 浏览器版本字符串. 比如 ‘5.1’os.family(str): 操作系统家族. 比如 ‘iOS’os.version(tuple): 操作系统版本元组. 比如 (5, 1)os.version_string(str): 操作系统版本字符串. 比如 ‘5.1’device.family(str): 设备家族. 比如 ‘iPhone’device.brand(str): 设备品牌. 比如 ‘Apple’device.model(str): 设备幸好. 比如 ‘iPhone’
user_language(str): 用户操作系统使用的语言. 比如'zh-CN'server_host(str): 当前会话的服务器host,包含域名和端口,端口为80时可以被省略origin(str): 当前用户的页面地址. 包含 协议、主机、端口 部分. 比如'http://localhost:8080'. 可能为空,但保证当用户的页面地址不在当前服务器下(即 主机、端口部分和server_host不一致)时有值.user_ip(str): 用户的ip地址.backend(str): PyWebIO使用的Web框架名. 目前可用值有'tornado','flask','django','aiohttp'.request(object): 创建当前会话时的Web请求对象. 根据PyWebIO使用的后端Server不同,request的类型也不同:使用Tornado后端时,
request为 tornado.httputil.HTTPServerRequest 实例使用Flask后端时,
request为 flask.Request 实例使用Django后端时,
request为 django.http.HttpRequest 实例使用aiohttp后端时,
request为 aiohttp.web.BaseRequest 实例
返回值的
user_agent属性是通过 user-agents 库进行解析生成的。参见 https://github.com/selwin/python-user-agents#usage