Django从自定义中间件中添加contrib.messages

|| 我已经实现了一个自定义的中间件,用于检查用户个人资料中的某些字段。注册时不需要这些字段(为了使用户快速便捷地注册),但是,我希望将它们填写完整。 我的中间件检查它们是否已设置。如果不是,它将通过消息通知用户。我遇到两个问题。 每当我提交发布的表单时,由于没有模板显示消息,因此中间件将第二次添加该消息,因为在发布消息时调用了中间件,并且在重定向之后再次调用了中间件。 我通过遍历中间件中的消息并检查是否要添加的消息已经解决了这个问题。如果是,则不再添加。 当用户通过更新其个人资料解决问题时,在接下来的页面加载中,消息仍然存在。在那之后,一切正常。在我的中间件开始时,实际上我放了一条检查,如果发布了请求,该检查将返回None(我原以为这可以解决两个问题,但不能解决任何一个问题)。 任何想法如何解决第二个问题?有没有更好的方法来解决我的第一个问题? 谢谢。 编辑: 有没有一种方法可以清除视图中的消息?我尝试遍历它们(没有storage.used = False),它们仍然存在。我希望这可以解决我的两个问题。     
已邀请:
Yoy可以使用https://github.com/AliLozano/django-messages-extends的粘性消息,该消息是仅将消息保留在请求中而不是保存在会话中的一种存储     
因此,您是否要使用“ 0”来存储永久性通知?它用于显示一次性通知,即用户看到消息一次,然后消失。所指的内容类型是诸如“表格编辑成功”这样的消息。 就消除用户消息堆栈中的消息而言:每当您使用“ 1”(此处讨论)来呈现模板时,所有消息都会被刷新(无论它们是否实际显示在页面上) 。 我不能完全确定这是您真正想要的答案,我对您的问题有点困惑。但是,我可以确定您正在使用超出其预期目的的消息,这很可能是您遇到麻烦的原因。     
您可以使用Middleware的process_reponse()方法添加消息。届时,您将知道是否向用户显示消息,具体取决于他的个人资料是否已填写该字段。 考虑使用django.contrib.messages。可能是您不想在所有请求上都显示“在XYZ字段中填写”信息,而只希望在几个页面上显示,例如用户登录或查看其个人资料页面时。     
只需将创建消息的逻辑放置到上下文处理器而不是中间件即可。修改请求并返回空字典。     

要回复问题请先登录注册