0

我在使用 django.contrib.messages 或显示 404 页面时有疑问。在哪种情况下我应该使用其中一种?

serial = get_object_or_404(SerialNumber, serial_number=sn)

或者

try:
    serial = SerialNumber.objects.get(serial_number=sn)
except SerialNumber.DoesNotExist
    messages.add_message(request, messages.WARNING, 'no found!')

提前致谢!

4

3 回答 3

2

假设您有一些这样的网址:

/article/<pk>/

如果最终用户调用/article/5/并且没有 ID 为 5 的文章,那么您不仅应该返回一条消息,即未找到搜索词,还应该返回正确的 HTTP 状态代码,即 404。这里您应该使用get_object_or_404.

如果你想在页面上显示一些附加信息,/article/4/并且有 ID 为 4 的文章,但没有这个特定的附加信息,那么你应该显示 ID 为 4 的文章的页面,返回 HTTP 状态码 200,表示 OK ,并显示附加信息不可用的消息。

在我看来,主要区别在于正确处理 HTTP 状态代码,但如果我错了,我会让其他人教我。

于 2014-10-27T11:13:37.703 回答
1

当用户尝试访问服务器上不可用的任何资源时,应显示 404 页面页面。另一方面,当您想让用户看到您的应用程序相关的自定义消息时,使用 django 消息传递。例如,当他删除或更新条目时,您可以向他显示删除/更新成功消息。

于 2014-10-27T12:52:05.217 回答
1

在我看来,404 错误和 Django 消息框架的主要区别在于 404 与服务器有关,而消息与您的应用程序有关。

换句话说,如果用户需要一个不存在的 url(即 /url/which/doesnt/exist/),那么服务器应该发送 404。但是如果用户需要您的应用程序的某个功能,该功能可能会失败或提供信息或调试消息(/articles/feature_acting_on_article_db/),那么您应该使用消息框架。

正如您在文档https://docs.djangoproject.com/en/1.7/ref/contrib/messages/中看到的那样,消息在应用程序级别使用。404 错误的定义由:http ://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 给出:

(...)当服务器不希望确切地揭示请求被拒绝的原因时,或者当没有其他响应适用时,通常使用此状态代码。

总而言之,我想说处理像 /article/5/ 这样没有第 5 篇文章的 url 的正确方法是发送消息,因为 /article/ pk / 是一个选择和显示 pk 信息的功能第一篇文章(没有文章并不意味着命令失败),即使用户输入了一个网址(但这是我对这个问题的看法)。

于 2014-10-27T12:49:37.327 回答