gpt4 book ai didi

python - 从 Pyramid 中的 __init__.py 访问请求

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:41 24 4
gpt4 key购买 nike

在设置 Pyramid 应用程序并将设置添加到配置器时,我在理解如何从请求访问信息时遇到问题,例如 request.session 等。我对使用 Pyramid 完全陌生,我到处搜索这方面的信息但一无所获。

我想要做的是在发送生产异常电子邮件时访问请求对象中的信息。我无法访问请求对象,因为在创建应用程序时它在 __init__.py 文件中不是全局的。这就是我现在得到的:

import logging
import logging.handlers
from logging import Formatter

config.include('pyramid_exclog')
logger = logging.getLogger()

gm = logging.handlers.SMTPHandler(('localhost', 25), 'email@email.com', ['email@email.com'], 'Error')
gm.setLevel(logging.ERROR)
logger.addHandler(gm)

这工作正常,但我想在发送异常电子邮件时包含有关已登录用户的信息,这些信息存储在 session 中。我如何从 __init__.py 访问该信息?

最佳答案

尝试使请求成为一个全局变量,或者以某种方式在全局范围内存储指向“当前”请求的指针(如果这就是您要尝试订阅 NewRequest 事件的方法)并不是一个非常好的方法idea - 一个 Pyramid 应用程序可以有多个执行线程,因此多个请求可以同时在一个进程中处于事件状态。因此,当应用程序以单线程模式运行且只有一个用户访问它时,该方法在开发过程中似乎可行,但在部署到生产服务器时会产生非常有趣的结果。

Pyramid 具有返回线程本地请求变量的 pyramid.threadlocal.get_current_request() 函数,但是,文档指出:

This function should be used extremely sparingly, usually only in unit testing code. it’s almost always usually a mistake to use get_current_request outside a testing context because its usage makes it possible to write code that can be neither easily tested nor scripted.

这表明整个方法不是“Pyramid ”(与 pythonic 相同,但对于 Pyramid :)

可能的其他解决方案包括:

  • 查看exlog.extra_info参数,应将请求的环境和参数属性包含到日志消息中
  • 注册异常 View 将允许完全自定义异常处理
  • 使用WSGI中间件,如WebError#error_catcherPaste#error_catcher发生异常时发送邮件
  • 如果您不仅要记录异常,还想记录其他可能的非致命信息,也许只需编写一个包装函数就足够了:

    if int(request.POST['donation_amount']) >= 1000000:
    send_email("Wake up, we're rich!", authenticated_userid(request))

关于python - 从 Pyramid 中的 __init__.py 访问请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11398590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com