【问题标题】:Django URL DesignDjango URL 设计
【发布时间】:2023-03-24 19:05:02
【问题描述】:

我经常发现自己陷入了一个对自己想出的 URL 不太确定的世界。我认为这主要是因为我有一些关于 django 中的 URL 设计的问题仍未得到解答。

假设,我为我的网站用户建立了一个公开的个人资料页面。可以通过提供用户 ID 来访问它。用户 ID 应该是 URL 的一部分(即/profile/<userid>/)还是应该在查询字符串中提供(/profile?userid=<userid>)?为什么?

我在我的项目中广泛使用 AJAX。 AJAX URL 的设计是否应该与其对应的不同?是否有用于此目的的设计模式?

【问题讨论】:

    标签: django django-urls


    【解决方案1】:

    这里没有任何硬性规定。我会说任何合理静态的东西都应该使用/profile/<userid>/ 格式。 GET 参数 - ?userid=<userid> - 应该保留给更动态的东西,只是难以编码为 URL 的一部分(例如一组搜索词),或者当您一次需要多个参数并且无法计数时在订单上。

    【讨论】:

    • 这是否也意味着一个带有可选参数的视图应该作为 GET 参数传入?是否也可以用一种更像 REST 的方法来论证每个资源应该由一个 URL 表示,或者在这种情况下这不是一个有效的考虑因素?
    【解决方案2】:

    Django 不鼓励使用查询字符串并鼓励使用漂亮的 URL。您只需在URLconf 中正确设置它们。如果您还没有阅读Django Book(可在线免费获得),您应该阅读。它在chapter 3 中谈到了这一点:

    关于漂亮 URL 的说明

    如果您有其他网站的经验 开发平台,例如 PHP 或 Java,您可能会想,“嘿, 让我们使用查询字符串参数!” - 就像是 /time/plus?hours=3,其中的时间将由 URL 查询字符串中的 hours 参数(? 后面的部分)。

    你可以用 Django 做到这一点(我们将在第 7 章告诉你如何做),但是 Django 的核心理念之一是 URL 应该是漂亮的。 URL /time/plus/3/ 更干净、更简单、更易读、更容易 大声朗诵给某人并且……比它的询问更漂亮 字符串对应。漂亮的 URL 是优质 Web 的一个特征 应用。

    Django 的 URLconf 系统通过简化 URL 来鼓励漂亮的 URL 使用漂亮的网址而不是。

    本章详细介绍了如何以及为什么要这样做!

    【讨论】:

    • 在 Django Book 中,我从 Tobu 那里得到了以下评论。 “漂亮的 url 有一个缺点:它们不加引号(请参阅tools.ietf.org/html/rfc3875#section-4.1.5),与百分比编码相比,不加引号会丢失信息。例如,C%2B%2B+Java 将在 url 和捕获。”
    • BDP 提到的 Django Book 中的另一个好点。 “请注意,漂亮的 URL 对许多搜索引擎索引器来说也“看起来”不错,因此拥有漂亮的 URL 也具有搜索引擎优化的优势。”
    • 对于取消引用,如果您使用正确的取消引用,情况并非如此。示例:import urllib; print urllib.unquote_plus("C%2B%2B+Java") 返回'C++ Java'。了解您的图书馆! :)
    【解决方案3】:

    前段时间我也有同样的疑惑,我公司的项目负责人对我说:

    "尽量避免无限量的不同网址"

    因此,如果某个参数可以生成无限不同的 URL,则应将其作为参数发送(例如:.com?param=),例如时间戳。有无数种不同的时间戳,所以它应该是一个参数。

    另一方面,有些值是有界的,例如一个对象 ID。如果您在 URL 中输入和 ID,在最坏的情况下,您可以生成与 ID 相同数量的 URL,但不能生成无限 URL。在这种情况下,ID 可以包含在 URL 中(例如:.com/content//view)

    这个简单的短语对我帮助很大,我希望你也是=)

    【讨论】:

      猜你喜欢
      • 2013-03-01
      • 2013-07-29
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 2020-09-18
      • 2018-02-11
      相关资源
      最近更新 更多