python - 测试发布请求时的Django消息中间件问题
问题描述
我正在尝试测试将消息添加到重定向成功页面的 UpdateView。看来我的问题来自于messages
pytest 返回:
django.contrib.messages.api.MessageFailure:不安装 django.contrib.messages.middleware.MessageMiddleware 就无法添加消息
我的测试代码是:
def test_authenticated_staff(self, rf):
langues = LanguageCatalog.objects.create(
lang_src='wz',
lang_dest='en',
percent='4'
)
req = rf.get(reverse("dashboard.staff:lang-update", kwargs={'pk': langues.pk}))
data = {'lang_src': 'it',
'lang_dest': 'en',
'percent': '34'}
req = rf.post(reverse(
"dashboard.staff:lang-update", kwargs={'pk': langues.pk}), data=data)
req.user = UserFactory()
resp = views.LangUpdateView.as_view()(req, pk=langues.pk)
我确切地说它MessageMiddleware
存在于MIDDLEWARE
设置中。我用Django==2.0.13
.
解决方案
我找到了解决方案。为了测试这样的请求,您需要先用会话注释它,然后再用消息注释它。实际上这意味着添加这些行:
from django.contrib.messages.middleware import MessageMiddleware
from django.contrib.sessions.middleware import SessionMiddleware
# in your test method:
"""Annotate a request object with a session"""
middleware = SessionMiddleware()
middleware.process_request(req)
req.session.save()
"""Annotate a request object with a messages"""
middleware = MessageMiddleware()
middleware.process_request(req)
req.session.save()
# and then (in my case)
resp = views.LangUpdateView.as_view()(req, pk=langues.pk)
推荐阅读
- javascript - CSS将div添加到相对于父级定位的dom而没有其他内容跳转
- networking - 我可以使用反向代理直接连接数据库吗?
- ios - 使用 Apple 登录刷新令牌验证仅返回访问令牌
- macos - 每当我在 Mac 上打开 Hyper 时,我的屏幕都会黑屏几秒钟
- mysql - 节点mysql ER_PARSE_ERROR 1064
- linux - 为 git commit 添加别名,这样就不需要引号
- optaplanner - Optaplanner 约束流分数计算问题
- linux-kernel - 在 Linux 中,如何测量/采样 GPIO 脉冲宽度
- flutter - Dart 封装列表(仅用于观察值)
- php - 站点生成的ip秒php