Django从自定义中间件添加contrib.messages
我已经实现了一个自定义中间件,用于检查用户配置文件中的某些字段。注册时不需要这些字段(为了方便用户快速注册),但是,我更希望他们填写这些字段 我的中间件检查它们是否已设置。如果没有,它会通过消息通知用户。我遇到了两个问题Django从自定义中间件添加contrib.messages,django,messages,middleware,Django,Messages,Middleware,我已经实现了一个自定义中间件,用于检查用户配置文件中的某些字段。注册时不需要这些字段(为了方便用户快速注册),但是,我更希望他们填写这些字段 我的中间件检查它们是否已设置。如果没有,它会通过消息通知用户。我遇到了两个问题 每当我提交一个发布的表单时,由于没有模板显示消息,中间件将再次添加消息,因为在发布消息时调用了中间件,在重定向之后再次调用了中间件 我通过迭代中间件中的消息并检查我要添加的消息是否已经存在来解决这个问题。如果是,则不会再次添加它 当用户通过更新他们的配置文件来解决问题时,在下
是否有方法清除视图中的消息?我尝试过遍历它们(没有存储。used=False),但它们仍然存在。我希望这可以解决我的两个问题。那么,您是否使用
django.contrib.messages
来存储永久通知?它用于显示一次性通知,用户只看到一次消息,然后消息就消失了。它的用途是“表单编辑成功”之类的消息
就清除用户消息堆栈中的消息而言:任何时候使用RequestContext
(已讨论)呈现模板时,所有消息都将被刷新(无论它们是否实际显示在页面上)
我不完全确定这是你真正想要的答案,你的问题让我有点困惑。但是,我敢肯定您使用的消息超出了预期用途,这可能就是您遇到问题的原因。您可以使用中间件方法添加消息。到那时,您将知道是否向用户显示消息,这取决于他的个人资料现在是否已填写字段
考虑使用django.contrib.messages。可能您不想在所有请求上显示“填写XYZ字段”消息,但只在少数页面上显示,比如用户登录或查看其个人资料页面时。Yoy可以使用粘性消息,这是一个只在请求中保存消息的存储,而不是在会话中保存消息的存储。只需将创建消息的逻辑放置到即可,而不是中间件。修改请求并返回空目录。消息不是永久性的。然而,它们很可能不止是一次的消息。这个想法是检查个人资料中的错误,检查他们是否验证了他们的电子邮件,并让他们知道,直到他们验证了为止。