導航:首頁 > 編程語言 > python如何開發web頁面

python如何開發web頁面

發布時間:2024-03-13 03:30:47

Ⅰ 純 python 寫一個 Web 框架,就是這么簡單

造輪子是最好的一種學習方式,本文嘗試從0開始造個Python Web框架的輪子,我稱它為 ToyWebF 。

本文操作環境為:MacOS,文中涉及的命令,請根據自己的系統進行替換。

ToyWebF的簡單特性:

下面我們來實現這些特性。

首先,我們需要安裝gunicorn,回憶一下Flask框架,該框架有內置的Web伺服器,但不穩定,所以上線時通常會替換成uWSGI或gunicorn,這里不搞這個內置Web服務,直接使用gunicorn。

我們創建新的目錄與Python虛擬環境,在該虛擬環境中安裝gunicorn

在啥都沒有的情況下,構建最簡單的Web服務,在ToyWebF目錄下,創建app.py與api.py文件,寫入下面代碼。

運行 gunicorn app:app 訪問 http://127.0.0.1:8000 ,可以看見 Hello, World! ,但現在請求體中的參數在environ變數中,難以解析,我們返回的response也是bytes形式。

我們可以使用webob庫,將environ中的數據轉為Request對象,將需要返回的數據轉為Response對象,處理起來更加直觀方便,直接通過pip安裝一下。

然後修改一下API類的 __call__方法 ,代碼如下。

上述代碼中,通過webob庫的Request類將environ對象(請求的環境信息)轉為容易處理的request,隨後調用handle_request方法對request進行處理,處理的結果,通過response對象返回。

handle_request方法在ToyWebF中非常重要,它會匹配出某個路由對應的處理方法,然後調用該方法處理請求並將處理的結果返回,在解析handle_request前,需要先討論路由注冊實現,代碼如下。

其實就是將路由和方法存到self.routes字典中,可以通過route裝飾器的形式將路由和方法關聯,也可以通過add_route方法關聯,在app.py中使用一下。

因為url中可以存在變數,如 @app.route("/hello/{name}") ,所以在匹配時,需要進行解析,可以使用正則匹配的方式進行匹配,parse這個第三方庫已經幫我們實現了相應的正則匹配邏輯,pip安裝使用一下則可。

這里定義find_handler方法來實現對self.routes的遍歷。

了解了路由與方法關聯的原理後,就可以實現handle_request方法,該方法主要的路徑就是根據路由調度對應的方法,代碼如下。

在該方法中,首先實例化webob庫的Response對象,然後通過self.find_handler方法獲取此次請求路由對應的方法和對應的參數,比如。

它將返回hello方法對象和name參數,如果是 /hello/二兩 ,那麼name就是二兩。

因為route裝飾器可能裝飾器的類對象,比如。

此時self.find_handler方法返回的hanler就是個類,但我們希望調用的是類中的get、post、delete等方法,所以需要一個簡單的判斷邏輯,通過inspect.isclass方法判斷handler如果是類對象,那麼就通過getattr方法獲取類對象實例的中對應的請求方法。

如果類對象中沒有該方法屬性,則拋出該請求類型不被允許的錯誤,如果不是類對象或類對象中存在該方法屬性,則直接調用則可。

此外,如果方法的路由並沒有注冊到self.routes中,即404的情況,定義了defalut_response方法返回其中內容,代碼如下。

如果handle_request方法中調度的過程出現問題,則直接raise將錯誤拋出。

至此,一個最簡單的web服務就編寫完成了。

回顧Flask,Flask可以支持HTML、CSS、JavaScript等靜態文件,利用模板語言,可以構建出簡單但美觀的Web應用,我們讓TopWebF也支持這一功能,最終實現圖中的網站,完美兼容靜態文件。

Flask使用了jinja2作為其html模板引擎,ToyWebF同樣使用jinja2,jinja2其實實現一種簡單的DSL(領域內語言),讓我們可以在HTML中通過特殊的語法改變HTML的結構,該項目非常值得研究學習。

首先 pip install jinja2 ,然後就可以使用它了,在ToyWebF項目目錄中創建templates目錄,以該目錄作為默認的HTML文件根目錄,代碼如下。

首先利用jinja2的FileSystemLoader類將file system中的某個文件夾作為loader,然後初始化Environment。

在使用的過程中(即調用template方法),通過get_template方法獲得具體的某個模板並通過render方法將對應的內容傳遞給模板中的變數。

這里我們不寫前端代碼,直接去互聯網中下載模板,這里下載了Bootstrap提供的免費模板,可以自行去 https://startbootstrap.com/themes/freelancer/ 下載,下載完後,你會獲得index.html以及對應的css、jss、img等文件,將index.html移動到ToyWebF/templates中並簡單修改了一下,添加一些變數。

然後在app.py文件中為index.html定義路由以及需要的參數。

至此html文件的支持就完成了,但此時的html無法正常載入css和js,導致頁面布局非常醜陋且交互無法使用。

接著就讓ToyWebF支持css、js,首先在ToyWebF目錄下創建static文件夾用於存放css、js或img等靜態文件,隨後直接將前面下載的模板,其中的靜態文件復制到static中則可。

通過whitenoise第三方庫,可以通過簡單的幾行代碼讓web框架支持css和js,不需要依賴nginx等服務,首先 pip install whitenoise ,隨後修改API類的 __init__ 方法,代碼如下。

其實就是通過WhiteNoise將self.wsgi_app方法包裹起來,在調用API的 __call__ 方法時,直接調用self.whitenoise。

此時,如果請求web服務獲取css、js等靜態資源,WhiteNoise會獲取其內容並返回給client,它在背後會匹配靜態資源在系統中對應的文件並將其讀取返回。

至此,一開始的網頁效果就實現好了。

web服務如果出現500時,默認會返回 internal server error ,這顯得比較丑,為了讓框架使用者可以自定義500時返回的錯誤,需要添加一些代碼。

首先API初始化時,初始self.exception_handler對象並定義對應的方法添加自定義的錯誤

在handler_request方法進行請求調度時,調度的方法執行邏輯時報500,此時不再默認將錯誤拋出,而是先判斷是否有自定義錯誤處理。

在app.py中,自定義錯誤返回方法,如下。

custom_exception_handler方法只返回自定義的一段話,你完全可以替換成美觀的template。

我們可以實驗性定義一個路由來看效果。

Web服務的中間件也可以理解成鉤子,即在請求前可以對請求做一些處理或者返回Response前對Response做一下處理。

為了支持中間件,在TopWebF目錄下創建middleware.py文件,在編寫代碼前,思考一下如何實現?

回顧一下現在請求的調度邏輯。

1.通過routes裝飾器關聯路由和方法 2.通過API.whitenoise處理 3.如果是請求API介面,那麼會將參數傳遞給API.wsgi_app 4.API.wsgi_app最終會調用API.handle_request方法獲取路由對應的方法並調用該方法執行相應的邏輯

如果希望在request前以及response後做相應的操作,那麼其實就需要讓邏輯在API.handle_request前後執行,看一下代碼。

其中add方法會實例化Middleware對象,該對象會將當前的API類實例包裹起來。

Middleware.handle_request方法其實就是在self.app.handle_request前調用self.process_request方法處理request前的數據以及調用self.process_response處理response後的數據,而核心的調度邏輯,依舊交由API.handle_request方法進行處理。

這里的代碼可能會讓人感到疑惑, __call__ 方法和handle_request方法中都有self.app.handle_request(request),但其調用對象似乎不同?這個問題暫時放一下,先繼續完善代碼,然後再回來解釋。

接著在api.py中為API創建middleware屬性以及添加新中間件的方法。

隨後,在app.py中,自定義一個簡單的中間件,然後調用add_middleware方法將其添加。

定義好中間件後,在請求調度時,就需要使用中間件,為了兼容靜態文件的情況,需要對css、js、ing文件的請求路徑做一下兼容,在其路徑中加上/static前綴

緊接著,修改API的 __call__ ,兼容中間件和靜態文件,代碼如下。

至此,中間件的邏輯就完成了。

但代碼中依舊有疑惑,Middleware類中的 __call__ 方法和handle_request方法其調用的self.app到底是誰?

為了方便理解,這里一步步拆解。

如果沒有添加新的中間件,那麼請求的調度邏輯如下。

在沒有添加中間件的情況下,self.app其實就是API本身,所以 middleware.__call__ 中的self.app.handle_request就是調用API.handle_request。

如果添加了新的中間件,如上述代碼中添加了名為SimpleCustomMiddleware的中間件,此時的請求調度邏輯如下。

因為注冊中間件時,Middleware.add方法替換了原始Middleware實例中的app對象,將其替換成了SimpleCustomMiddleware,而SimpleCustomMiddleware也有app對象,SimpleCustomMiddleware中的app對象,才是API類實例。

在請求調度的過程中,就會觸發Middleware類的handle_request方法,該方法就會執行中間件相應的邏輯去處理request和response中的數據。

當然,你可以通過Middleware.add方法添加多個中間件,這就會構成棧式調用的效果,代碼如下。

啟動web服務後,其執行效果如下。

Ⅱ 如何用Python做Web開發

1.python入門
推薦老齊《從零開始學python》,《python簡明教程》,這兩本書很適合小白入門(像我一樣長期徘徊在編程門外的人)
2.python進階
推薦《python學習手冊》,python學習手冊的前半部分與在入門教程中的基礎部分相重復,後面部分對python的介紹更細致,比如面向對象的這部分對於小白理解相對容易。
還有一本《python cookbook》,這本是在講述python的經典用法,目前讀過函數,裝飾器以及網路編程這三部分,在不斷的敲玩具代碼的過程中,會發現書中講的例子不斷會出現。
3.學習web開發,自然要涉及到基於python的web 框架。
1)flask
flask如同官方所描述的那樣,是一個web微框架,用幾行代碼就可以實現一個在hello world,現在的個人感覺是flask確實適合新手入門。基於這個原則,
推薦《flask web 開發》這本書,這本書簡直是良心,講的很細,並且在github上有源碼,可以很容易跟著作者的步驟去學習,不懂得的地方可以去問谷歌或者qq群。
推薦的第二本是《building web applications with flask》這本書是對flask框架的細化,深入講解flask的模板,restful等等,雖然是英文,但是葉能順利閱讀下去
推薦的第三本是《flask Framework cookbook》,這三本書是一個不段進階的部分。
2)django
django是大而全,開箱即用,在flask了解的差不多的時候去了解,畢竟生成環境用的django相對多一點。
django學習可以看得書:(1)tango with django只有一個應用去學習,對於新手友好,可以比對github源碼
(2)django by example 注重實戰,有幾個實例,blog, shop etc,涉及django基礎,redis,celery,solr,ajax,很全面,也是web開發常用的技術
4.在學習框架的過程中,會不斷體會到前端的知識也是要補回來,可以w3c school看一下。
5.資料庫,在python中內置了sqlite, sql命令有相同之處,路線是sqlite, mysql, mongodb,有個逐漸過度的過程。
6.了解http的具體工作流程,這點目前還是有點模糊
7.工具集:sublime(需要配置,主要用於python編程,神器誰用誰知道), vim, firebug, firefox, linux,github(代碼大寶庫,各種代碼)
8.學習的過程覺得幾點很重要
1)做好筆記,同樣的問題會遇到第二次,有個筆記容易復查
2)善用谷歌,善用qq與論壇,你現在遇到的問題,大多數前人都遇到過,stackflow是個好地方
3)迷茫的時候還是堅持看,因為畢竟是小白,不懂的太多,你總要把他弄懂
4)有時間了可以把演算法與數據結構補起來

Ⅲ 如何用Python做Web開發

Python的Web開發,也是工作崗位比較多的領域。

一、基於Python的代表性Web框架

下面是一些比較有代表性的框架:

Django:


Python 界最全能的 Web 開發框架,battery-include 各種功能完備,可維護性和開發速度一級棒。常有人說 Django 慢,其實主要慢在 Django ORM 與資料庫的交互上,所以是否選用 Django,取決於項目對資料庫交互的要求以及各種優化。而對於 Django 的同步特性導致吞吐量小的問題,其實可以通過 Celery 等解決,倒不是一個根本問題。Django 的項目代表:Instagram,Guardian。

Ⅳ python web開發用什麼工具

Python Web開發可以用到的工具有很多,比如:Pydev + Eclipse、PyCharm、VIM、Wing IDE、Spyder Python、Notpad++、Vistual Studio等,根據自己的需求來選擇合適的工具即可。

Ⅳ python 進行web 開發 怎麼配置環境

Python的目前有兩個版本,Python 2.7.5 和 Python 3.3.2。Python 3.x 與 2.x 不僅僅是版本的新舊的區別那麼簡單,Python3.x 是一個全新的東西。

1、下面的 Python 2.7.5 這個版本是 .msi 格式的,所以直接安裝即可,將 Python 2.7 安裝在了 E:Python 下。

然後就是配置環境變數, 具體不多說,直接附圖:

Ⅵ python怎麼做web開發

用Python做Web開發,Django框架是個非常好的起點。
Django是一個開放源代碼的Web應用框架,由Python寫成。採用了MTV的框架模式,即模型M,視圖V和模版T。它最初是被開發來用
於管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的,即是CMS(內容管理系統)軟體。並於2005年7月在BSD許可證下發布。
Django已經成為web開發者的首選框架,是一個遵循 MVC 設計模式的框架。MVC是Model、View、Controller三個單詞的簡寫,分別
代表模型、視圖、控制器。Django其實也是一個MTV 的設計模式。MTV是Model、Template、View三個單詞的簡寫,分別代表模型、
模版、視圖 。但是在Django中,控制器接受用戶輸入的部分由框架自行處理,所以 Django 里更關注的是模型(Model)、模板
(Template)和視圖(Views),稱為 MTV模式。
Django 視圖不處理用戶輸入,而僅僅決定要展現哪些數據給用戶,而Django 模板 僅僅決定如何展現Django視圖指定的數據。或者說,
Django將MVC中的視圖進一步分解為 Django視圖 和 Django模板兩個部分,分別決定 「展現哪些數據」 和 「如何展現」,使得
Django的模板可以根據需要隨時替換,而不僅僅限制於內置的模板。
至於MVC控制器部分,由Django框架的URLconf來實現。URLconf機制是使用正則表達式匹配URL,然後調用合適的Python函數。
URLconf對於URL的規則沒有任何限制,你完全可以設計成任意的URL風格,不管是傳統的,RESTful的,或者是另類的。框架把控制層
給封裝了,無非與數據交互這層都是資料庫表的讀,寫,刪除,更新的操作。在寫程序的時候,只要調用相應的方法就行了,感覺很方便。程
序員把控制層東西交給Django自動完成了。 只需要編寫非常少的代碼完成很多的事情。所以,它比MVC框架考慮的問題要深一步,因為
我們程序員大都在寫控制層的程序。這個工作交給了框架,僅需寫很少的調用代碼,大大提高了工作效率。
更多技術請關注Python視頻教程。

Ⅶ 怎麼用python實現一個頁面的開發

去年春節期間,沒事報了一個pythonweb開發的網路課程,根據自己的學習情況來回答一下。

一個頁面的開發,應該是分前端和後端的。

關於後端

在python中有兩個最常見的開發框架:Django,flask。

Django大而全,什麼功能模塊都已經封裝好了,調用即可;flask小而精,沒有很高的封裝,但是有許多功能模塊,需要我們自己去集成。

當初學習的那個網路課程是用flask框架來做的,上手很簡單:

當初學習的時候能寫一個小的網站,本來想轉行做python後端開發的,但是後來還是接著做數據挖掘了橘旅臘,許久不用,倒是有點生疏了。總得來說,有幾大模塊:

路由

route()裝飾器把一個函數綁定到對應的URL上,Flask的URL規則基圓滑於Werkzeug的路由模塊。這個模塊背後的思想是基於Apache以及更早的HTTP伺服器主張的先例,保證優雅且唯一的URL。

模板渲染Jinja2

用Python生成HTML十分無趣,而且相當繁瑣,因為你必須手動對HTML做轉義來保證應用的安鎮液全。為此,Flask配備了Jinja2模板引擎。當然你也可以使用其他的模板引擎,但是建議你還是使用jinja2模板

請求對象request

你可以使用全局request對象訪問進入的請求數據。Flask處理進入的請求數據並允許你用這個全局對象訪問它。如果你工作在多線程環境,Flask內部保證你總會在當前線程上獲取正確的數據。

資料庫交互-Flask-SQLAlchemy

通過sqlalchemy對資料庫增刪改查,使用的是orm模式,不需要寫SQL語句。

在資料庫中,一個表就是一個python類,一個類的實例就是表中的行。

在開發過程中,會用到一些python的高級應用:

裝飾器:在許可權驗證的時候很需要用到

模塊的導入:防止循環導入

圖像處理:驗證碼生成

property使用:密碼加密時使用

關於前端

如果對前端不熟,想做一個小網站練練手,推薦你使用Bootstrap

裡面有各種的CSS樣式,各種組件,JS插件,還有一些網站實例供你參考,對前端HTML,CSS不是很熟悉的,可以通過這略微修改快速搭建一個前端頁面。

後記:

將來的數據挖掘工作者可能也需要懂網站後端開發,因為以後建模不會一直都是在單機中,可能會集成到網站中,實時數據流入模型,結果展示在網站上。

Ⅷ 如何用Python搭建一個網站

Python搭建網站,利用現成的框架還是挺簡單的。在這滑咐里舉一個例子-利用Flask搭建一個網站。

Flask

Flask是一個使用Python編寫的輕量級Web應用框架。其WSGI工具箱採用Werkzeug,模板引擎則使用Jinja2。Flask創建一個應用很簡單,只需要一行代碼就可以創建一個應用。一個最小的應用看起來像這樣:

直接執行pythonhello.py,就可以看到頁面就可以訪問了,這只是官方給出的一個示例,方便學習。

應用初始化

所有Flask程序都必須創建一個程序實例。Web伺服器使用一種名為Web伺服器網關介面(WebServerGatewayInterface,WSGI)的協議,把接收自客戶端的所有請求都轉交給這個對象處理。程序實例是Flask類的對象,經常使用下述代碼創建:

Flask類的構造函數只有一個必須指定的參數,即程序主模塊或包的名字。在大多數程序中,Python的__name__變數就是所需的值。

路由和視圖函數

客戶端(例如Web瀏覽器)把請求發送給Web伺服器,Web伺服器再把請求發送給Flask程序實例。程備余序實例需要知道對每個URL請求運行哪些代碼,所以保存了一個URL到Python函數的映射關系。處理URL和函數之間關系的程序稱為路由。在Flask程序中定義仿讓滾路由的最簡便方式,是使用程序實例提供的app.route修飾器,把修飾的函數注冊為路由。下面的例子說明了如何使用這個修飾器聲明路由:

index()函數注冊為程序根地址的處理程序。如果部署程序的伺服器域名為,在瀏覽器中訪問p>

啟動伺服器

程序實例用run方法啟動Flask集成的開發Web伺服器:

__name__=='__main__'是Python的慣常用法,在這里確保直接執行這個腳本時才啟動開發Web伺服器。如果這個腳本由其他腳本引入,程序假定父級腳本會啟動不同的伺服器,因此不會執行app.run()。伺服器啟動後,會進入輪詢,等待並處理請求。輪詢會一直運行,直到程序停止,比如按Ctrl-C鍵。

Flask開發的網站實例

本示例中網站的結構如下

啟動伺服器界面

訪問WEB頁面

整個是利用Flask自己搭建的一個WEB頁面,資料庫試過mysql和mongodb都可以正常訪問。整體感覺Flask的學習成本會比Django低,而且也比Django更靈活。

閱讀全文

與python如何開發web頁面相關的資料

熱點內容
vs2010編譯嵌套太深 瀏覽:980
程序員面試注意事項 瀏覽:740
scratch編譯為h5 瀏覽:208
威聯通套件編譯 瀏覽:231
清刻pdf 瀏覽:982
可編程延時發生器 瀏覽:93
濱州用伺服器織夢要怎麼上傳文件 瀏覽:866
java7與java8 瀏覽:958
真空壓縮袋什麼材質好 瀏覽:935
excel批量見建文件夾 瀏覽:556
黑馬程序員就業班筆記 瀏覽:370
單片機供電自鎖電路設計 瀏覽:56
pythongui測試工具 瀏覽:834
哈曼l7功放編程 瀏覽:220
體溫單片機 瀏覽:614
快捷鍵命令不能用了 瀏覽:349
邊界層加密網格優點 瀏覽:236
linuxvi保存文件 瀏覽:536
把視頻打包出文件夾是什麼意思 瀏覽:448
如何在藏書館app上注銷賬號 瀏覽:827