Python 是否仅用于构建网站后端?

Python 是否仅用于构建网站后端?

我从未见过用 Python 构建的网站,其网址末尾包含 .py。我只见过index.htmlindex.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 响应。

http://docs.djangoproject.com/en/dev/topics/http/urls/

相关内容