我从未见过用 Python 构建的网站,其网址末尾包含 .py。我只见过index.html
和index.php
,但有时没有,就像 SO 中那样。我知道你可以通过 .htaccess -file 以某种方式隐藏结尾。
我想知道其原因。
为什么没有以.py结尾的网站?
答案1
通常,PHP 脚本被直接访问,类似于 CGI 脚本 - 基本上您可以像访问任何常规文件一样访问脚本,但 Web 服务器会拦截此请求,运行脚本并返回输出而不是文件内容。
大多数 Python 框架都有自己的路由系统,您可以在其中定义类似的内容..
urls = (
('^/article/(\d+)$', ArticleController),
('^/user/(.+?)$', UserController)
)
..然后您将访问类似的内容..
http://example.com/router.py?uri=article/123
..它将通过在中定义的URL映射运行urls
,并将请求发送到适当的类...但是router.py
在所有URL中都包含该部分有点糟糕,因此您可以使用mod_rewrite
重定向/(.*)
到/router.py/$1
(通过.htaccess
,您的Apache配置等)
你完全可以用 PHP 或任何其他语言做同样的事情 - 这正是代码点火器works(一个 PHP 框架)
如果你完全疯了,你可以使用mod_rewrite
并映射/user/(\d+).py
到/ViewController.php?id=$1
或其他东西,但通常没有必要向页面添加虚假的扩展(有几个例外,主要是向后兼容,并允许在 API 中访问不同格式的数据)
您还可以使用 Python 执行“PHP 方式”,如果您将每个页面编写为单独的 CGI 脚本,那么大多数 Python 框架倾向于使用我上面描述的 MVC(或类似 MVC)设置。
答案2
好的 URL 应该独立于技术,因此应避免使用 .php 或 .py 或 .rb 扩展名。大多数情况下,python 框架(如 Turbogears)会处理所有 URL 解析,而后台运行的 python 程序会将其所有参数保存在一个良好的数据结构中,因此在这种情况下您看不到任何文件扩展名。
看“酷炫的 URI 不会改变”作者:蒂姆·伯纳斯·李
答案3
好吧,可能大多数人都隐藏了扩展,因为这是更聪明的做法。这意味着,如果您说切换到 PHP(不是您想这样做...),您就不必更改扩展。
但是,有些网站有.py
扩展程序(Google 的几个部分都有)。
更好的问题是,为什么大多数 ASP.NET 和 PHP 用户坚持保留扩展?
答案4
Django 是(可能)最流行的用 Python 开发 Web 应用程序/网站的框架,它使用 url 映射到 Python 函数,因此当您发出请求时,/url/
它实际上会调用一个分配给处理该 url 请求的函数。换句话说,url 和 .py 文件之间没有一对一的映射。
更新(根据评论):
在典型的 php 网站中,url 看起来像这样/path/to/file.php
,并且收到此请求后,网络服务器将运行 php 文件并将其输出返回为HTTP 响应。
在Django中,表单的url/path/of/url/
被框架拦截,它实际上并不对应任何文件,它只是HTTP 请求,并且 Django 框架有一个url 调度机制将 URL 映射到普通函数。如果找到指定用于处理此类 URL 的函数,它将调用该函数,并返回该函数返回的 Http 响应。