A. 10個讓你愛不釋手的python開源框架
如果你正在學習python,那麼這10個開源框架,你可千萬別錯過,這些框架包括事件I/O,OLAP,Web開發,高性能網路通信,測試,爬蟲等。雖說不上是全都有,但也足夠滿足你了。
0.Django:Python Web應用開發框架
眾所周知,Python下有許多款不同的 Web 框架。而其中,Django是最具代表性之一,許多成功的網站和APP都基於Django。
Django是是一個全能型框架,它最出名的是其全自動化的管理後台:只需要使用起ORM,做簡單的對象定義,它就能自動生成資料庫結構、以及全功能的管理後台。
相關推薦:《Python教程》
1.Cubes:輕量級Python OLAP框架
Cubes是一個輕量級Python框架,包含OLAP、多維數據分析和瀏覽聚合數據(aggregated data)等工具。
2.Kartograph.py:創造矢量地圖的輕量級Python框架
Kartograph是一個Python庫,用來為ESRI生成SVG地圖。Kartograph.py目前仍處於beta階段,你可以在virtualenv環境下來測試。
3.Pulsar:Python的事件驅動並發框架
Pulsar是一個來自eBay的高擴展性、高可用性、基於事件驅動的開源實時分析平台和流處理框架,它能夠實時收集和處理用戶行為和業務事件。
4.Tornado:非同步非阻塞IO的Python Web框架
Tornado的全稱是Torado Web Server,傳說中性能高高的框架。Tornado 是一個很好的框架,支持非同步處理的功能,這是它的特點,其他框架不支持。另外一點是,Tornado 的設計似乎更注重 RESTful URL。
5.Bottle:微型Python Web框架
Bottle 和 Flask 都屬於輕量級的 Web 框架。說微型,是因為它只有一個文件,除Python標准庫外,它不依賴於任何第三方模塊。6.Web2py:全棧式Web框架
Web2py是 Google 在 web.py 基礎上二次開發而來的,兼容 Google App Engine 。是一個為Python語言提供的全功能Web應用框架,旨在敏捷快速的開發Web應用,具有快速、安全以及可移植的資料庫驅動的應用。
7.Falcon:構建雲API和網路應用後端的高性能Python框架
Falcon是一個構建雲API的高性能Python框架,是一個面向Hadoop的數據集和處理過程的管理平台。它鼓勵使用REST架構風格,盡可能以最少的力氣做最多的事情。
8.Diesel:基於Greenlet的事件I/O框架
Diesel提供一個整潔的API來編寫網路客戶端和伺服器。支持TCP和UDP。非阻塞I/O使得diesel非常快速並且容易擴展。
greenlets使得diesel有了unwind(to(callbacks(no)))。nose使得測試變得容易。最後,Flask使得你不需要寫一個新的網路框架來使用diesel。
9.Flask:一個用Python編寫的輕量級Web應用框架
Flask同樣也是一個Python編寫的Web 微框架,能夠快速實現一個網站或Web服務。屬於輕量級Web應用框架。花很少的成本就能夠開發一個簡單的網站。非常適合初學者學習。Flask 框架學會以後,可以考慮學習插件的使用。
Flask也被稱為「microframework」,因為它使用簡單的核心,用extension增加其他功能。
B. restful哪種實現方式性能最好
基於RESTful 的幾種實現
1.1. Rails
Ruby on Rails是新興的敏捷Web開發框架,在動態語言Ruby的支持下,Rails以新鮮的視角告訴我們Web開發是簡單而快樂的。Rails對 RESTful Web Service的開發作了極大的封裝和簡化,這對開發人員來說是一個強大的工具。而且即將發布的Rails 2.0將全面基於REST。
1.2. Axis2
Apache Axis2是傳統的java Web Service框架Axis的下一代版本。從最初的Apache Axis和Apache SOAP到目前的Axis2,經歷了大量變革和發展。相對以前的版本,Axis2更靈活、更高效、更簡單。作為Java端官方和傳統Web Service框架,在REST與SOAP的硝煙彌漫、戰火紛飛的狀況下,Axis2嘗試同時支持SOAP和REST,採用了WSDL2.0中將REST 與Web服務結合的工作成果。
1.3. Django
Django是基於python語言的敏捷Web和Web服務開發框架,它的設計與Rails十分類似,只不過簡化和封裝稍少一些。
1.4. JSR 311: JAX-RS
JAX-RS(JSR 311,Java API for XML-RESTful Web Services)是基於annotation的實現方式,我們通過annotation的方式把一個java class標注成RESTful web service,並把它的方法標注成HTTP的CRUD。相關的annotation有@path @Proces@GET @POST @DELETE @PUT @PathParam等,對java開發人員在使用起來比較方便。
目前已經有很多現成的實現,比如Jersey Apache CXF JBoss RESTEasy
1.5. 其他支持RESTful的Java框架
Restlet(http://www.restlet.org/)
Cetia4(https://cetia4.dev.java.net/)
Apache Axis2(http://http://ws.apache.org/axis2/)
sqlREST(http://sqlrest.sourceforge.net/)
REST-art(http://rest-art.sourceforge.net/)
RESTEasy的性能要好於 Jersey,無論哪種嵌入式JEE容器。
Jersey+Grizzly2和Jersey+Jetty, dropwizard性能差別不大
dropwizard底層實際是Jersey+Jetty,性能結果也和Jersey+Jetty一樣
RESTEasy+netty (netty3)的結果並沒有優於RESTEasy+undertow.這出乎我的意料,可能CPU和Memory佔用上會好一些
RESTEasy+netty4的性能遠遠低於RESTEasy+netty3,這出乎我的意料。或許因為Netty線程池的改變。
純netty的性能遠遠高於其它框架,一方面是由於沒有http router的邏輯,另一方面也顯示了Netty框架的優秀。如果不是實現很復雜的路由和很多的Service,不妨使用純Netty實現高性能。
Spring Boot太厚重了,使用Spring MVC的語法,性能只有Jersey的一半。
Vert.x底層使用Netty,可以使用Java 8 Lambda語法,也提供了其它語言的支持,但是性能看起來不是太好,而且隨著並發量增大吞吐率也隨之下降。
C. python的web框架哪個好
python在web開發方面有著廣泛的應用。鑒於各種各樣的框架,對於開發者來說如何選擇將成為一個問題。為此,我特此對比較常見的幾種框架從性能、使用感受以及應用情況進行一個粗略的分析。
1 Django
Django是一個開放源代碼的Web應用框架,由Python寫成。採用了MTV的框架模式,即模型M,模板T和視圖V。它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的,即是CMS(內容管理系統)軟體。Django與其他框架比較,它有個比較獨特的特性,支持orm,將資料庫的操作封裝成為python,對於需要適用多種資料庫的應用來說是個比較好的特性。不過這種特性,已經有其他庫完成了,sqlalchemy.
2 Flask
Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱採用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權。
Flask也被稱為 「microframework」 ,因為它使用簡單的核心,用 extension 增加其他功能。Flask沒有默認使用的資料庫、窗體驗證工具。
Flask 很輕,花很少的成本就能夠開發一個簡單的網站。非常適合初學者學習。Flask 框架學會以後,可以考慮學習插件的使用。例如使用 WTForm + Flask-WTForm 來驗證表單數據,用 SQLAlchemy + Flask-SQLAlchemy 來對你的資料庫進行控制。
推薦學習《python教程》
3 Tornado
Tornado是一種 Web 伺服器軟體的開源版本。Tornado 和現在的主流 Web 伺服器框架(包括大多數 Python 的框架)有著明顯的區別:它是非阻塞式伺服器,而且速度相當快。
得利於其 非阻塞的方式和對epoll的運用,Tornado 每秒可以處理數以千計的連接,因此 Tornado 是實時 Web 服務的一個 理想框架。不過現在與眾多的框架比較,Tornado已經被拋在了後面,Django已經超過了它,更不說其他框架了,只能說Tornado使用純python開發的性能還是不能與其他框架藉助於cython開發的性能相比。
4 web.py
web.py 是一個Python 的web 框架,它簡單而且功能強大。web.py 是公開的,無論用於什麼用途都是沒有限制的。而且相當的小巧,應當歸屬於輕量級的web 框架。但這並不影響web.py 的強大,而且使用起來很簡單、很直接。在實際應用上,web.py 更多的是學術上的價值,因為你可以看到更多web 應用的底層,這在當今「抽象得很好」的web 框架上是學不到的 :)
5 Aiohttp
高性能非同步web框架,既有客戶端的也有服務端的,還支持web-socket
6 Sanic
與flask類似,並支持非同步
7 Vibora
旨在成為最快的python web框架。vibora的高性能依賴於 cython實現的uvloop非同步框架及cython實現的http_parser, 再加上一些cython構建的web組件,比如 模板,user-route等。目前還處於測試階段。
8 Bottle
Bottle是一個簡單高效的遵循WSGI的微型python Web框架。說微型,是因為它只有一個文件,除Python標准庫外,它不依賴於任何第三方模塊。
9 Falcon
Falcon是一個構建雲API的高性能Python框架,它鼓勵使用REST架構風格,盡可能以最少的力氣做最多的事情。
10 weppy
性能優於flask的一個全棧web框架。
D. 如何用python開發移動App後台
1、使用python開發APP後台要用到tornado框架,因為非阻塞io的原因,性能非常高,特別適合寫後端API(App的後端應該都是rest風格的api),而且成熟穩定。
2、APP後台需要部署伺服器,這方面涉及到運維、測試、開發諸多方面, 部署和測試推薦幾個包:fabric、nose、unittest(python自帶),版本管理推薦git,持續集成推薦使用docker+jenkins。
3、APP後台服務性能需求方面,youtube、reddit、豆瓣、知乎這樣的大流量網站都是python寫的,所以App的規模不太可能遇到性能問題,即使有也應該不是python的問題,而是任何語言都會有問題。大量的pv是可以靠堆伺服器堆出來,如果是計算量比較大的任務,可以考慮用c或c++寫。
4、網頁前端以及移動端開發後台用python寫的API,讓前端使用React,就可以輕松解決前後端分離這個問題。
5、現有開源實例子比較少,App後端開源的不常見,而且大部分是rest風格的api,很多時候會涉及到自身的業務和敏感信息也不會開源,所以都要自己從頭開始編寫。
E. python rest框架哪個好
從GitHub中整理出的15個最受歡迎的Python開源框架。這些框架包括事件I/O,OLAP,Web開發,高性能網路通信,測試,爬蟲等。
Django: Python Web應用開發框架
Django 應該是最出名的Python框架,GAE甚至Erlang都有框架受它影響。Django是走大而全的方向,它最出名的是其全自動化的管理後台:只需要使用起ORM,做簡單的對象定義,它就能自動生成資料庫結構、以及全功能的管理後台。
Diesel:基於Greenlet的事件I/O框架
Diesel提供一個整潔的API來編寫網路客戶端和伺服器。支持TCP和UDP。
Flask:一個用Python編寫的輕量級Web應用框架
Flask是一個使用Python編寫的輕量級Web應用框架。基於Werkzeug WSGI工具箱和Jinja2
模板引擎。Flask也被稱為「microframework」,因為它使用簡單的核心,用extension增加其他功能。Flask沒有默認使用的數
據庫、窗體驗證工具。
Cubes:輕量級Python OLAP框架
Cubes是一個輕量級Python框架,包含OLAP、多維數據分析和瀏覽聚合數據(aggregated data)等工具。
Kartograph.py:創造矢量地圖的輕量級Python框架
Kartograph是一個Python庫,用來為ESRI生成SVG地圖。Kartograph.py目前仍處於beta階段,你可以在virtualenv環境下來測試。
Pulsar:Python的事件驅動並發框架
Pulsar是一個事件驅動的並發框架,有了pulsar,你可以寫出在不同進程或線程中運行一個或多個活動的非同步伺服器。
Web2py:全棧式Web框架
Web2py是一個為Python語言提供的全功能Web應用框架,旨在敏捷快速的開發Web應用,具有快速、安全以及可移植的資料庫驅動的應用,兼容Google App Engine。
Falcon:構建雲API和網路應用後端的高性能Python框架
Falcon是一個構建雲API的高性能Python框架,它鼓勵使用REST架構風格,盡可能以最少的力氣做最多的事情。
Dpark:Python版的Spark
DPark是Spark的Python克隆,是一個Python實現的分布式計算框架,可以非常方便地實現大規模數據處理和迭代計算。DPark由豆瓣實現,目前豆瓣內部的絕大多數數據分析都使用DPark完成,正日趨完善。
Buildbot:基於Python的持續集成測試框架
Buildbot是一個開源框架,可以自動化軟體構建、測試和發布等過程。每當代碼有改變,伺服器要求不同平台上的客戶端立即進行代碼構建和測試,收集並報告不同平台的構建和測試結果。
Zerorpc:基於ZeroMQ的高性能分布式RPC框架
Zerorpc是一個基於ZeroMQ和MessagePack開發的遠程過程調用協議(RPC)實現。和 Zerorpc 一起使用的 Service API 被稱為 zeroservice。Zerorpc 可以通過編程或命令行方式調用。
Bottle: 微型Python Web框架
Bottle是一個簡單高效的遵循WSGI的微型python Web框架。說微型,是因為它只有一個文件,除Python標准庫外,它不依賴於任何第三方模塊。
Tornado:非同步非阻塞IO的Python Web框架
Tornado的全稱是Torado Web Server,從名字上看就可知道它可以用作Web伺服器,但同時它也是一個Python Web的開發框架。最初是在FriendFeed公司的網站上使用,FaceBook收購了之後便開源了出來。
webpy: 輕量級的Python Web框架
webpy的設計理念力求精簡(Keep it simple and powerful),源碼很簡短,只提供一個框架所必須的東西,不依賴大量的第三方模塊,它沒有URL路由、沒有模板也沒有資料庫的訪問。
Scrapy:Python的爬蟲框架
Scrapy是一個使用Python編寫的,輕量級的,簡單輕巧,並且使用起來非常的方便。
F. 如何使用python 開發一個api
使用 Python 和 Flask 設計 RESTful API
近些年來 REST (REpresentational State Transfer) 已經變成了 web services 和 web APIs 的標配。
在本文中我將向你展示如何簡單地使用 Python 和 Flask 框架來創建一個 RESTful 的 web service。
什麼是 REST?
六條設計規范定義了一個 REST 系統的特點:
客戶端-伺服器: 客戶端和伺服器之間隔離,伺服器提供服務,客戶端進行消費。
無狀態: 從客戶端到伺服器的每個請求都必須包含理解請求所必需的信息。換句話說, 伺服器不會存儲客戶端上一次請求的信息用來給下一次使用。
可緩存: 伺服器必須明示客戶端請求能否緩存。
分層系統: 客戶端和伺服器之間的通信應該以一種標準的方式,就是中間層代替伺服器做出響應的時候,客戶端不需要做任何變動。
統一的介面: 伺服器和客戶端的通信方法必須是統一的。
按需編碼: 伺服器可以提供可執行代碼或腳本,為客戶端在它們的環境中執行。這個約束是唯一一個是可選的。
什麼是一個 RESTful 的 web service?
REST 架構的最初目的是適應萬維網的 HTTP 協議。
RESTful web services 概念的核心就是「資源」。 資源可以用URI來表示。客戶端使用 HTTP 協議定義的方法來發送請求到這些 URIs,當然可能會導致這些被訪問的」資源「狀態的改變。
HTTP 標準的方法有如下:
REST 設計不需要特定的數據格式。在請求中數據可以以JSON形式, 或者有時候作為 url 中查詢參數項。
設計一個簡單的 web service
堅持 REST 的准則設計一個 web service 或者 API 的任務就變成一個標識資源被展示出來以及它們是怎樣受不同的請求方法影響的練習。
比如說,我們要編寫一個待辦事項應用程序而且我們想要為它設計一個 web service。要做的第一件事情就是決定用什麼樣的根 URL 來訪問該服務。例如,我們可以通過這個來訪問:
http://[hostname]/todo/api/v1.0/
在這里我已經決定在 URL 中包含應用的名稱以及 API 的版本號。在 URL 中包含應用名稱有助於提供一個命名空間以便區分同一系統上的其它服務。在 URL 中包含版本號能夠幫助以後的更新,如果新版本中存在新的和潛在不兼容的功能,可以不影響依賴於較舊的功能的應用程序。
下一步驟就是選擇將由該服務暴露(展示)的資源。這是一個十分簡單地應用,我們只有任務,因此在我們待辦事項中唯一的資源就是任務。
我們的任務資源將要使用 HTTP 方法如下:
我們定義的任務有如下一些屬性:
id: 任務的唯一標識符。數字類型。
title: 簡短的任務描述。字元串類型。
description: 具體的任務描述。文本類型。
done: 任務完成的狀態。布爾值。
目前為止關於我們的 web service 的設計基本完成。剩下的事情就是實現它!
Flask 框架的簡介
如果你讀過Flask Mega-Tutorial 系列,就會知道 Flask 是一個簡單卻十分強大的 Python web 框架。
在我們深入研究 web services 的細節之前,讓我們回顧一下一個普通的 Flask Web 應用程序的結構。
我會首先假設你知道 Python 在你的平台上工作的基本知識。 我將講解的例子是工作在一個類 Unix 操作系統。簡而言之,這意味著它們能工作在 Linux,Mac OS X 和 Windows(如果你使用Cygwin)。 如果你使用 Windows 上原生的 Python 版本的話,命令會有所不同。
讓我們開始在一個虛擬環境上安裝 Flask。如果你的系統上沒有 virtualenv,你可以從https://pypi.python.org/pypi/virtualenv上下載:
既然已經安裝了 Flask,現在開始創建一個簡單地網頁應用,我們把它放在一個叫 app.py 的文件中:
為了運行這個程序我們必須執行 app.py:
現在你可以啟動你的網頁瀏覽器,輸入http://localhost:5000看看這個小應用程序的效果。
簡單吧?現在我們將這個應用程序轉換成我們的 RESTful service!
使用 Python 和 Flask 實現 RESTful services
使用 Flask 構建 web services 是十分簡單地,比我在Mega-Tutorial中構建的完整的服務端的應用程序要簡單地多。
在 Flask 中有許多擴展來幫助我們構建 RESTful services,但是在我看來這個任務十分簡單,沒有必要使用 Flask 擴展。
我們 web service 的客戶端需要添加、刪除以及修改任務的服務,因此顯然我們需要一種方式來存儲任務。最直接的方式就是建立一個小型的資料庫,但是資料庫並不是本文的主體。學習在 Flask 中使用合適的資料庫,我強烈建議閱讀Mega-Tutorial。
這里我們直接把任務列表存儲在內存中,因此這些任務列表只會在 web 伺服器運行中工作,在結束的時候就失效。 這種方式只是適用我們自己開發的 web 伺服器,不適用於生產環境的 web 伺服器, 這種情況一個合適的資料庫的搭建是必須的。
我們現在來實現 web service 的第一個入口:
正如你所見,沒有多大的變化。我們創建一個任務的內存資料庫,這里無非就是一個字典和數組。數組中的每一個元素都具有上述定義的任務的屬性。
取代了首頁,我們現在擁有一個 get_tasks 的函數,訪問的 URI 為 /todo/api/v1.0/tasks,並且只允許 GET 的 HTTP 方法。
這個函數的響應不是文本,我們使用 JSON 數據格式來響應,Flask 的 jsonify 函數從我們的數據結構中生成。
使用網頁瀏覽器來測試我們的 web service 不是一個最好的注意,因為網頁瀏覽器上不能輕易地模擬所有的 HTTP 請求的方法。相反,我們會使用 curl。如果你還沒有安裝 curl 的話,請立即安裝它。
通過執行 app.py,啟動 web service。接著打開一個新的控制台窗口,運行以下命令:
我們已經成功地調用我們的 RESTful service 的一個函數!
現在我們開始編寫 GET 方法請求我們的任務資源的第二個版本。這是一個用來返回單獨一個任務的函數:
第二個函數有些意思。這里我們得到了 URL 中任務的 id,接著 Flask 把它轉換成 函數中的 task_id 的參數。
我們用這個參數來搜索我們的任務數組。如果我們的資料庫中不存在搜索的 id,我們將會返回一個類似 404 的錯誤,根據 HTTP 規范的意思是 「資源未找到」。
如果我們找到相應的任務,那麼我們只需將它用 jsonify 打包成 JSON 格式並將其發送作為響應,就像我們以前那樣處理整個任務集合。
調用 curl 請求的結果如下:
當我們請求 id #2 的資源時候,我們獲取到了,但是當我們請求 #3 的時候返回了 404 錯誤。有關錯誤奇怪的是返回的是 HTML 信息而不是 JSON,這是因為 Flask 按照默認方式生成 404 響應。由於這是一個 Web service 客戶端希望我們總是以 JSON 格式回應,所以我們需要改善我們的 404 錯誤處理程序:
我們會得到一個友好的錯誤提示:
接下來就是 POST 方法,我們用來在我們的任務資料庫中插入一個新的任務:
添加一個新的任務也是相當容易地。只有當請求以 JSON 格式形式,request.json 才會有請求的數據。如果沒有數據,或者存在數據但是缺少 title 項,我們將會返回 400,這是表示請求無效。
接著我們會創建一個新的任務字典,使用最後一個任務的 id + 1 作為該任務的 id。我們允許 description 欄位缺失,並且假設 done 欄位設置成 False。
我們把新的任務添加到我們的任務數組中,並且把新添加的任務和狀態 201 響應給客戶端。
使用如下的 curl 命令來測試這個新的函數:
注意:如果你在 Windows 上並且運行 Cygwin 版本的 curl,上面的命令不會有任何問題。然而,如果你使用原生的 curl,命令會有些不同:
當然在完成這個請求後,我們可以得到任務的更新列表:
剩下的兩個函數如下所示: