Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django从自定义中间件添加contrib.messages_Django_Messages_Middleware - Fatal编程技术网

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

Django从自定义中间件添加contrib.messages,django,messages,middleware,Django,Messages,Middleware,我已经实现了一个自定义中间件,用于检查用户配置文件中的某些字段。注册时不需要这些字段(为了方便用户快速注册),但是,我更希望他们填写这些字段 我的中间件检查它们是否已设置。如果没有,它会通过消息通知用户。我遇到了两个问题 每当我提交一个发布的表单时,由于没有模板显示消息,中间件将再次添加消息,因为在发布消息时调用了中间件,在重定向之后再次调用了中间件 我通过迭代中间件中的消息并检查我要添加的消息是否已经存在来解决这个问题。如果是,则不会再次添加它 当用户通过更新他们的配置文件来解决问题时,在下

我已经实现了一个自定义中间件,用于检查用户配置文件中的某些字段。注册时不需要这些字段(为了方便用户快速注册),但是,我更希望他们填写这些字段

我的中间件检查它们是否已设置。如果没有,它会通过消息通知用户。我遇到了两个问题

  • 每当我提交一个发布的表单时,由于没有模板显示消息,中间件将再次添加消息,因为在发布消息时调用了中间件,在重定向之后再次调用了中间件

    我通过迭代中间件中的消息并检查我要添加的消息是否已经存在来解决这个问题。如果是,则不会再次添加它

  • 当用户通过更新他们的配置文件来解决问题时,在下一个页面加载时,消息仍然存在。不过,在那之后,一切都正常了。在我的中间件开始时,我实际上放了一个检查,如果请求被发布,则返回None(我本以为这可以解决这两个问题,但这两个问题都没有解决)

  • 你知道如何解决第二个问题吗?有没有更好的方法来解决我的第一个问题

    谢谢

    编辑:


    是否有方法清除视图中的消息?我尝试过遍历它们(没有存储。used=False),但它们仍然存在。我希望这可以解决我的两个问题。

    那么,您是否使用
    django.contrib.messages
    来存储永久通知?它用于显示一次性通知,用户只看到一次消息,然后消息就消失了。它的用途是“表单编辑成功”之类的消息

    就清除用户消息堆栈中的消息而言:任何时候使用
    RequestContext
    (已讨论)呈现模板时,所有消息都将被刷新(无论它们是否实际显示在页面上)

    我不完全确定这是你真正想要的答案,你的问题让我有点困惑。但是,我敢肯定您使用的消息超出了预期用途,这可能就是您遇到问题的原因。

    您可以使用中间件方法添加消息。到那时,您将知道是否向用户显示消息,这取决于他的个人资料现在是否已填写字段


    考虑使用django.contrib.messages。可能您不想在所有请求上显示“填写XYZ字段”消息,但只在少数页面上显示,比如用户登录或查看其个人资料页面时。Yoy可以使用粘性消息,这是一个只在请求中保存消息的存储,而不是在会话中保存消息的存储。

    只需将创建消息的逻辑放置到即可,而不是中间件。修改请求并返回空目录。

    消息不是永久性的。然而,它们很可能不止是一次的消息。这个想法是检查个人资料中的错误,检查他们是否验证了他们的电子邮件,并让他们知道,直到他们验证了为止。