我有与列出的问题类似的问题
发送 POST 数据并访问模型时,Django 会产生空白页
和
以下是有问题的观点之一:
@transaction.commit_on_success
@occ_update
@checks_status
def hold(request):
if not request.user.has_perm('orders.hold'):
return error_response_rollback(NO_PERMISSION_MSG % "hold orders")
order = Order.objects.get(pk=request.POST.get('pk'))
occ_revision = int(request.POST.get('occ_revision'))
agent = Agent.get_agent(request.user)
action = Action(agent=agent, type='hold_order',
comments=request.POST.get('comments'))
action.save()
order.hold(action, occ_revision)
return ok_response_commit("Order held successfully.")
error_response_rollback 回滚事务并返回一个以 JSON 作为其内容的 HttpResponse。
我正在为我的应用程序中的许多视图添加权限检查,当用户没有正确的权限时,会返回空白响应。
然而,就像上面提到的问题一样,如果你把
print request
或者
request.POST
语句在权限检查之前,每次都正确地将 NO_PERMISSION_MSG JSON 字符串返回给浏览器(error_response_rollback 返回一个带有 JSON 的 HttpResponse 对象。)
当您在“打印请求”之前检查权限并且它们没有正确的权限时,您会得到空白响应。
在以下情况下,您不会收到空白回复:
- 用户具有正确的权限
- “打印请求”语句在任何权限检查之前
- 您可以随时使用 Firefox。
@occ_update 和 @checks_status 装饰器只是捕获异常。这些问题在存在和不存在的情况下都会发生。
我正在使用 Chrome 进行开发,这在 Firefox 中都不是问题。
我发现一页建议重载 WSGIRequest 对象以在将请求传递给视图之前读取请求,但这对我来说似乎很恶心,我宁愿找出真正的解决方案。
有没有人知道 runserver 命令的任何修复/设置来帮助解决这个问题而无需破解请求?我的用户主要使用 Chrome,所以我更愿意继续使用它……我们拭目以待。目前使用 Django 1.3.1 在 Windows 中开发
我考虑过的一个选择是制作另一个 manage.py 命令来处理这个问题,但这也似乎很糟糕。
谢谢
更新:
我已经能够重新组织我的代码,以便在从 POST 读取一些数据后进行任何权限检查。这似乎消除了这个问题的任何症状。它仍然不理想,但它是插入中间件以阅读帖子的好选择。并且并非总是在所有应用程序中都是可能的。
如果您有类似的情况并且无法弄清楚,请发表评论。