題 Python僅用於構建網站後端嗎?


我沒有看到Python構建的網站,以至於網站的網址末尾包含.py。我只見過 index.html 和 index.php,但有時沒有像SO那樣。我知道你可以通過.htaccess -file以某種方式隱藏結尾。

我想知道原因。

為什麼沒有以.py結尾的網站?


4
2017-07-26 17:17


起源


請訪問stackoverflow.com獲取有關python +++的更多幫助 - pavsaund
一個相關的問題現在在 stackoverflow.com/questions/1185248/... - Léo Léopold Hertz 준영


答案:


通常,PHP腳本是直接訪問的,類似於CGI腳本 - 基本上您像任何常規文件一樣訪問腳本,但Web服務器攔截此請求,運行腳本並返回輸出而不是文件內容。

大多數Python框架都有自己的路由系統,您可以在其中定義類似的東西。

urls = (
    ('^/article/(\d+)$', ArticleController),
    ('^/user/(.+?)$', UserController)
)

..然後你會訪問像..

http://example.com/router.py?uri=article/123

..它將通過在中定義的URL映射運行 urls,並將請求發送到適當的類...但有 router.py 所有網址中的部分都有點糟糕,所以你使用 mod_rewrite 重定向 /(.*) 至 /router.py/$1 (通過 .htaccess,你的Apache配置等)

您可以使用PHP或任何其他語言完全做同樣的事情 - 這正是如此  工作(PHP框架)

如果你是完全瘋了,你 可以 使用 mod_rewrite 和地圖 /user/(\d+).py 至 /ViewController.php?id=$1 或某些東西,但通常沒有必要在頁面上添加假擴展(有一些例外,主要是向後兼容性,並允許在API中訪問不同格式的數據)

您也可以使用Python進行“PHP方式”,如果您將每個頁面編寫為單獨的CGI腳本,那麼大多數Python框架都傾向於使用我上面描述的MVC(或類似MVC)設置。


4
2017-07-27 06:32





一個好的URL將獨立於技術,因此要防止.php或.py或.rb擴展。大多數情況下,python框架(如Turbogears)處理所有的URL解析,並且在後台運行的python程序將所有參數都放在一個漂亮的數據結構中,因此在這種情況下你看不到任何文件擴展名。

看到 “很酷的URI不會改變” 蒂姆伯納斯 - 李


17
2017-07-26 18:43





好吧,可能大多數人都隱藏了擴展名,因為這是更明智的選擇。這意味著如果你說,切換到PHP(不是你想要...),你就不必更改擴展名。

但是,有網站 .py 擴展(Google的幾個部分都有它)。

更好的問題是,為什麼大多數ASP.NET和PHP用戶都堅持要保持擴展?


8
2017-07-26 19:45



你的回答告訴我,在PHP中擴展比在PHP和ASP.NET中更容易。 --- 哪個Python模塊提供了這些功能? - Léo Léopold Hertz 준영
@Masi:沒有模塊可以執行特定的操作來刪除擴展名。實際上在Python中沒有任何擴展可以擺脫。換句話說,URL中的擴展名不需要與文件的擴展名相對應。因此,如果您的網絡應用程序是由.py文件構成的,那麼您的網址絕對沒有理由以.py結尾。如果你已經習慣了PHP,這可能沒有意義,因為PHP強制URL的擴展名與文件的擴展名相同(好吧,你甚至可以解決這個問題,但這並不是特別簡單);我認為它在ASP中是一樣的。 - David Z


傳輸到您的計算機的是HTML(可能帶有CSS和JavaScript代碼)。 CSS和JavaScript本身不會顯示,因此您看不到這些擴展名。 HTML是要顯示的內容,因此您習慣於查看.html擴展名。

現在,誰關心HTML文檔是在記事本中手動編寫的,還是與0.1秒前運行的某些程序動態組合在一起。這沒什麼區別。

PHP通常用於以這種方式即時創建HTML文檔。將.php extesion添加到由PHP程序創建的HTML文檔中是習慣性的,並不意味著什麼。最終用戶在瀏覽器中看到HTML文檔。

Web服務器需要一些信息如何查找要提供的HTML文檔 - 從磁盤讀取手工製作的HTML文檔?通過運行一些PHP程序創建一個? .php擴展名可以用作提示。這只是一個服務器配置問題。

如果您有興趣使用python服務Web,請查看項目 Django的


3
2017-07-26 17:26





Django,(可能)最流行的python中的webapps /網站框架,使用url-mapping到python函數,所以當你請求 /url/ 它實際上會調用一個被分配給處理對該URL的請求的函數。換句話說,url和.py文件之間沒有一對一的映射。

更新(每條評論):

在典型的PHP網站中,網址看起來像 /path/to/file.php 並根據此請求,Web服務器運行php文件並返回其輸出 HTTP響應

在Django中,表單的URL /path/of/url/ 被框架截獲,它實際上並不對應於任何文件,它只是一個簡單的部分 HTTP請求,Django框架有一個 網址調度機制 將url映射到正常函數。如果它找到一個被分配來處理這種類型的url的函數,它將調用它,並返回該函數返回的Http Response。

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


3
2017-07-27 07:37



你知道任何視頻/指南/代碼示例,它們展示了你的一對一映射點嗎? 我想了解你的意思。 - Léo Léopold Hertz 준영


這裡,你可以看到Google留下.py擴展名。


2
2017-07-26 21:45



謝謝你指出了! - 仍然很難看到,因為它不僅僅是最終的結果。 - Léo Léopold Hertz 준영


與您的問題沒有直接關係,但不僅僅是使用Python創建網站。整個AI引擎 EVE在線 (一個MMP空間遊戲)是用Python編寫的,我相信。


1
2017-07-26 19:03





Google搜索.py

第9個結果 http://schmidt.nuigalway.ie/cs103/python/graphics.py

這至少有一個網站的文件以.py結尾 - 可能還有更多。


1
2017-07-26 19:56



這不是一個網站:它是一個發布的腳本。 - Telemachus
這是網站: schmidt.nuigalway.ie/cs103/python - Telemachus


這種差異主要是由調度請求的方式引起的。

顯示文件擴展名的網站主要通過文件系統直接發送。當您看到類似的URL路徑時 /example/index.php,Web服務器轉到 example 文件根目錄下的目錄,打開 index.php 文件,並執行其內容(簡化一點)。由於它們通過文件系統,因此它們傾向於使用整個文件名,包括擴展名。

沒有顯示文件擴展名的網站大多以其他方式進行調度。例如,在 Django的,(簡化了一點)一個表映射URL路徑的表,該路徑將處理請求。由於URL路徑和文件系統路徑之間沒有關係,因此映射可以完全是任意的,並且沒有理由添加“假”擴展。

第一種情況有例外;例如,與 mod_rewrite 您可以重新映射URL路徑,輕鬆隱藏任何文件擴展名(這很常見)。

您沒有經常看到Python的第一個案例的原因是大多數人在使用Python構建站點時使用Web框架,這些站點都進行自己的調度。即使使用PHP,這也很常見(Drupal的 是一個常見的PHP框架),但創建“獨立”頁面(沒有框架)在PHP中比在Python中更常見。


1
2017-07-26 23:32