A. 請教python JSON API 伺服器選什麼框架
1 3 這些框架都可以滿足要求。 2 不犯錯需要經驗,基本上沒有框架是沒有坑的,只是挖坑的地方不同而已。
小項目不用擔心犯嚴重錯誤,大不了重寫嘛。小項目,業務邏輯寫好了,換框架不費事。
推薦 flask 或者 bottle.
原因:輕量級,項目在持續維護,結構簡單,性能可靠。
django 由於重量級,以及這個項目不需要 SQL 類型的 ORM ,也不需要模板渲染和相關的輔助工具,系統復雜帶來的學習成本,不做考慮。
web.py 自從原作者前些年不幸去世之後,項目維護和發展不及 flask 和 bottle. 所以從文檔和性能調優方面來看,不推薦。
如果追求性能 bottle + gevent 或者 bottle + uwsgi 挺靠譜的。
如果喜歡各種集成, flask 對周邊東西的集成比 bottle 多一些。用 bottle 需要你自己比較懂 web , flask 即使不懂也可以開始用別人寫好的一些東西。
B. python架構是什麼
Python中的架構就是框架,這些框架可以讓web應用的開發更輕松。
這些框架把不同的模塊集成在一起,讓你更快的開發程序而不用注意一些細節。
Python中幾種框架的介紹:
Django: Python Web應用開發框架
Django 應該是最出名的Python框架,GAE甚至Erlang都有框架受它影響。Django是走大而全的方向,它最出名的是其全自動化的管理後台:只需要使用起ORM,做簡單的對象定義,它就能自動生成資料庫結構、以及全功能的管理後台。
Flask:一個用Python編寫的輕量級Web應用框架
Flask是一個使用Python編寫的輕量級Web應用框架。基於Werkzeug WSGI工具箱和Jinja2 模板引擎。Flask也被稱為「microframework」,因為它使用簡單的核心,用extension增加其他功能。Flask沒有默認使用的資料庫、窗體驗證工具。
Web2py:全棧式Web框架
Web2py是一個為Python語言提供的全功能Web應用框架,旨在敏捷快速的開發Web應用,具有快速、安全以及可移植的資料庫驅動的應用,兼容Google App Engine。
Tornado:非同步非阻塞IO的Python Web框架
Tornado的全稱是Torado Web Server,從名字上看就可知道它可以用作Web伺服器,但同時它也是一個Python Web的開發框架。最初是在FriendFeed公司的網站上使用,FaceBook收購了之後便開源了出來。
更多Python知識,請關註:Python自學網!!
C. python怎麼搭建django框架
運行環境
Windows 7(64位) + Python 2.7 + Django 1.7.1
1.安裝django框架
當然你首先要有python環境,對於學python的朋友們這個就不多說了~~
我使用的是setuptools工具來安裝的,setuptools是python中安裝第三方模塊常用的安裝工具
1.1安裝setuptools工具(如果會安裝的可以直接跳過)
先從這個地址下載ez_setup.py:
https://pypi.python.org/pypi/setuptools#windows(在頁面最下面)
我下載的是setuptools-7.0.zip,將其解壓,將解壓的setuptools-7.0文件放到一個目錄,我這里假定將其放到C:\workspace目錄下
打開命令行cmd,在cmd中切換到C:\workspace\setuptools-7.0,即setuptools-7.0安裝目錄
運行命令:
python ez_setup.py
該命令會安裝setuptools工具,安裝後打開你的python安裝目錄下的Scripts目錄(我的是C:\Python27\Scripts),會看到easy_install.exe等文件
注意將python安裝目錄下的Scripts目錄(我的是C:\Python27\Scripts)添加到環境變數path,否則下面的easy_install命令會報錯
1.2安裝django框架
在cmd中輸入:
easy_install django
有的安裝過程可能會提示缺少vc++包,根據提示網址(我忘了~)下載包,我下載的是VCForPython27.msi,安裝vc++後再執行安裝
這樣就自動安裝了django,是不是很方便,哈哈
2.創建django項目,這里假定在c:\workspace\djangoTest下創建(和java有點差別,java是直接創建項目就可以了,python是要先創建項目再在項目里創建app)
進入c:\workspace\djangoTest目錄,輸入:
django-admin startproject mytodo #網上很多是python django-admin.py startproject mytodo,版本不一樣可能命令有細微差別
就創建了mytodo項目
3.啟動調試伺服器
進入c:\workspace\djangoTest\djangoTest\mytodo目錄:
cd mytodo
然後輸入:
python manage.py runserver
在瀏覽器中輸入http://127.0.0.1:8000/,看能否訪問頁面
4.創建app
輸入命令:python manage.py startapp todo
就在mytodo項目下創建了一個app,即todo
編輯mytodo/settings.py文件,在INSTALLED_APPS添加條目todo
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'todo',
)
即在最後添加一行todo(有的版本是項目名+app名,即mytodo.todo)
再次輸入:python manage.py runserver看看你app是否配置好了,養成邊寫邊測試的好習慣,哈哈~
5.配置資料庫
django默認的是使用SQLite資料庫作為後台資料庫,仍然打開mytodo/settings.py,可以看到下面一段:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
這就是django項目的資料庫配置,默認是使用SQLite,我們就使用使用默認配置,安裝SQLite資料庫,不需要修改配置文件
聽到又要安裝資料庫,大家肯定又覺得好復雜,其實在python里安裝三方模塊,資料庫什麼的很簡單,一條命令就可以搞定了~~
輸入命令:
easy_install pysqlite
這樣就安裝了SQLite資料庫
安裝完資料庫,我們也測試一下,輸入命令:
python manage.py syncdb
出現successfully提示就安裝成功了,打開mytodo目錄,看看裡面是否有一個db.sqlite3文件,這就是上面配置的資料庫文件
D. Python網路編程
在當今Python伺服器框架 (framework, 比如Django, Twisted, web.py等等) 橫行的時代,從底層的socket開始寫伺服器似乎是一個出力不討好的笨方法。框架的意義在於掩蓋底層的細節,提供一套對於開發人員更加友好的API,並處理諸如MVC的布局問題。框架允許我們快速的構建一個成型而且成熟的Python伺服器。然而,框架本身也是依賴於底層(比如socket)。對於底層socket的了解,不僅可以幫助我們更好的使用框架,更可以讓我們明白框架是如何設計的。更進一步,如果擁有良好的底層socket編程知識和其他系統編程知識,你完全可以設計並開發一款自己的框架。如果你可以從底層socket開始,實現一個完整的Python伺服器,支持用戶層的協議,並處理好諸如MVC(Model-View-Control)、多線程(threading)等問題,並整理出一套清晰的函數或者類,作為介面(API)呈現給用戶,你就相當於設計了一個框架。socket介面是實際上是操作系統提供的系統調用。socket的使用並不局限於Python語言,你可以用C或者JAVA來寫出同樣的socket伺服器,而所有語言使用socket的方式都類似(Apache就是使用C實現的伺服器)。而你不能跨語言的使用框架。框架的好處在於幫你處理了一些細節,從而實現快速開發,但同時受到Python本身性能的限制。我們已經看到,許多成功的網站都是利用動態語言(比如Python, Ruby或者PHP,比如twitter和facebook)快速開發,在網站成功之後,將代碼轉換成諸如C和JAVA這樣一些效率比較高的語言,從而讓伺服器能更有效率的面對每天億萬次的請求。在這樣一些時間,底層的重要性,就遠遠超過了框架。
E. python web開發 該用什麼框架
Djang Python Web應用開發框架
Django是一個開放源代碼的Web應用框架,由Python寫成。採用了MTV的框架模式,即模型M,視圖V和模版T。它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的,即是CMS(內容管理系統)軟體。
Flask:一個用Python編寫的輕量級Web應用框架
Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱採用 Werkzeug ,模板引擎則使用 Jinja2
。Flask使用 BSD 授權。
Flask也被稱為 「microframework」 ,因為它使用簡單的核心,用 extension
增加其他功能。Flask沒有默認使用的資料庫、窗體驗證工具。
Tornado:非同步非阻塞IO的Python Web框架
Tornado是一種 Web 伺服器軟體的開源版本。Tornado 和主流Web 伺服器框架(包括大多數 Python
的框架)有著明顯的區別:它是非阻塞式伺服器,而且速度相當快。
得利於其非阻塞的方式和對epoll的運用,Tornado 每秒可以處理數以千計的連接,因此 Tornado 是實時 Web 服務的一個 理想框架。
F. python都有哪些應用伺服器框架
django ,
flask ,
這兩個是我常用的,也是比較好用的框架
G. 如何在Python中使用ZeroMQ和Docker構建微服務架構
微服務是什麼?
微服務是一種架構風格,它包括多個彼此間進行通信的獨立進程。在設計上,這些進程具有高度的可擴展性、相互解耦而且一次只完成一個較小的任務。這些服務都擁有自己的資源以及通過網路實現彼此間通信的進程。
相比於靠後端的 單體結構
來封裝所有伺服器邏輯的傳統客戶端-伺服器架構(C/S架構)而言,微服務架構的差異性體現在關注點分離(Separation of
concern)。這種設計模式更易於維護,使得靈活性、可擴展性及容錯能力更強。但是這種分布式架構所的不足之處體現在如果設計不合理就會使得排錯及維
護變得復雜。
一個簡單微服務的例子
讓我們來分析這樣的一個場景:你正在使用微服務模式構建一個電子商務網店。
對於一個電商網店上的常見商品,好比說iPhone,其詳情頁會顯示:
。產品的及基本信息
。你的購買歷史
。哪些人買了iPhone也買了手機套
。與蘋果手機相關的優惠和折扣
。店家的數據
。送貨方式
。推薦商品等等
此外,這個簡單的產品詳情頁的介面將有多個版本的來匹配web、移動端以及用於第三方應用程序的REST API。
在微服務模式中數據分布在多個服務之間。在這個例子中,服務包括:
。產品詳情服務
。商家服務
。支付服務
。優惠及折扣服務
。庫存服務
。定價服務
。回顧服務
。推薦服務
這些獨立的服務是如何被訪問的呢?
解決辦法是使用一個API網管,它作為所有客戶端的單一入口並且根據需求調用分布在整個基礎架構中的特定微服務。以上模式的行業應用案例是NetFlix API網關,它具有支持不同設備的多個API客戶端。你可以點擊此處 了解更多 。
構建一個簡單的微服務
目前有很多方法可以用於構建你的微服務。
在本文中我們將使用ZeroMQ來創建兩個進程之間的通信。ZeroMQ提供了用於在套接字之上開發可擴展、分布式systed的構建塊。它使用橢圓曲線密碼體制(第四版)來實現安全性,並提供了即刻開啟的 通訊模式 。
關於ZMQ,還有很多 優點 。MQ即是針對非同步工作而設計的線程化消息隊列。談論太多zeroMQ的內容已經超出了本文的范疇,你可以閱讀 使用zeromq 以及 zeromq用於分布式系統 。
我們要使用的另一個工具是 Docker 。本文假設讀者對Docker已經有了基礎的了解。
ZeroMQ有很多種通訊模式,為了開始我們的工作,讓我們用ZeroMQ和Flask來配置一個簡單的PUB-SUB。下圖展示了組件之間的關系和數據流。
1&3 - 一個flask伺服器運行在5000埠上而且其URL是 /downcase/ 。該URL用來接受(GET)請求,而所有格式為的請求將收到回應:答謝字元將會轉換為小寫字元並返回。
2 - 回應的消息也被發送給同一個容器中的ZMQ發布者(Publisher)
4,5 - ZMQ訂閱者(subscriber)持續監聽並將來自ZMQ伺服器的消息保存到名為 subscriber.log 的文件中
創建伺服器
首先看一下我們的Dockerfile
<pre><code>
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get install -y --force-yes python python-dev python-setuptools software-properties-common gcc python-pip
RUN apt-get clean all
RUN pip install pyzmq
RUN pip install Flask
ADD zmqserver.py /tmp/zmqserver.py
Flask Port
EXPOSE 5000
Zmq Sub Server
EXPOSE 4444
CMD ["python","/tmp/zmqserver.py"]
</code></pre>
我們選擇Ubuntu
14.04作為容器操作系統。我們安裝了基本的軟體包。通過pip,我們安裝pyzmq(zeromq的Python綁定)同時也安裝了Flask。接著
我們導出埠5000(flask伺服器)和4444(發布者運行的埠)。此外,我們復制了包含所有flask及zeromq
pythond代碼的腳本文件 zmqserver.py 並運行它。
現在我們來看一下zmqserver.py的內容:
server.py
import time
import zmq
HOST = '127.0.0.1'
PORT = '4444'
_context = zmq.Context()
_publisher = _context.socket(zmq.PUB)
url = 'tcp://{}:{}'.format(HOST, PORT)
def publish_message(message):
try:
_publisher.bind(url)
time.sleep(1)
_publisher.send(message)
except Exception as e:
print "error {}".format(e)
finally: _publisher.unbind(url)
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route("/downcase/", methods=['GET'])
def lowerString():
_strn = request.args.get('param')
response = 'lower case of {} is {}'.format(_strn, _strn.lower()) publish_message(response)
return response
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=False)
ZMQ發布者運行在4444埠上。我們創建了一個context並且聲明了URL。我們運行了flask app,它通過URL /downcase/ 把GET獲得的參數 Param 轉換成小寫字元,這就是服務的應答。應答的字元串是 published ,它作為一個消息把相同的字元串返回給瀏覽器。
為了構建以上的Docker映像(image),我們執行以下的命令:
sudo docker build -t docker-zmq-pub
並且在該映像之上執行:
docker run --name docker-pub-server -p 5000:5000 -p 4444:4444 -t docker-zmq-pub
我們把容器中的埠5000和4444映射到這台主機上,於是無論客戶端在哪裡,它們都可以訂閱這個發布者。
訂閱者客戶端
client.py
import zmq
import sys
import time
import logging
import os
HOST = '127.0.0.1'
PORT = '4444'
logging.basicConfig(filename='subscriber.log', level=logging.INFO)
class ZClient(object):
def __init__(self, host=HOST, port=PORT):
"""Initialize Worker"""
self.host = host
self.port = port
self._context = zmq.Context()
self._subscriber = self._context.socket(zmq.SUB)
print "Client Initiated"
def receive_message(self):
"""Start receiving messages"""
self._subscriber.connect('tcp://{}:{}'.format(self.host, self.port))
self._subscriber.setsockopt(zmq.SUBSCRIBE, b"")
while True:
print 'listening on tcp://{}:{}'.format(self.host, self.port)
message = self._subscriber.recv()
print message
logging.info(
'{} - {}'.format(message, time.strftime("%Y-%m-%d %H:%M")))
if __name__ == '__main__':
zs = ZClient()
zs.receive_message()
我們聲明了發布者的IP地址及埠,當前它運行在同一個的主機上因此地址是127開頭。我們在URL tcp://IP:PORT 上進行監聽。一旦我們收到一個消息,就將其附上時間戳後記錄到名為 subscriber.log 的文件中。運行客戶端要做的所有工作就是執行 python <name_of_client_file>.py 。如果你在以上的架構上進行構建,它可以很好地充當近實時的日誌聚合引擎。
我在Unbuntu主機上對以上的代碼進行了測試。這里所用的代碼保管在 github 上。這是一個如何配置zmq、docker和python伺服器的基礎講解,在我的下一片文章中我們會使用我們已經學習的東西構建簡單的微服務。
H. 請教Python,API,伺服器選什麼框架
Tornado, 非同步的,不需要開一堆進程 /線程來跑。一個核開一個進程就好。
簡單,沒有 Flask 和 Django 那麼多東西,易上手(特別是做 JSON API )。而且你也有非同步編程的經驗。
另外我用過 Flask ,特別討厭它的 g 和 request 這種「全局」變數。剛開始用著方便,但是很容易犯下嚴重的設計錯誤( 必要地耦合到這些變數上)。
I. 怎麼搭建 python 的介面自動化測試框架
1.框架搭建
1.1 將struts2中的jar文件導入到項目中
commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,freemarker-2.3.15.jar,ognl-2.7.3.jar
struts2-core-2.1.8.1.jar,xwork-core-2.1.6.jar
1.2 將struts.xml文件拷貝到項目的src目錄下
1.3 修改web.xml文件
添加:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.action中方法的調用方式
2.1 自動方法調用(只能調用execute)
2.2 指定方法調用(通過設置action標簽中的method屬性)
2.3 動態方法調用(在調用時,在action後加!方法名稱,如:login!deletUser)
注意:<constant name="struts.enable.DynamicMethodInvocation" value="true" />
2.4 通配符調用
3. action接收客戶端參數的方式
3.1 直接在action中定義參數變數,並生成set和get方法
3.2 定義接收參數的類
注意:都要為action的成員變數提供get和set方法
3.3 讓action實現ModelDriven介面,並實現裡面的getModel方法
4.獲取request,session,application的方式
4.1 用ActionContext獲取,實際上獲取到的都是Map對象
4.2 用ServletActionContext獲取,獲取到的是基於Servlet API的對象
J. 如何用 python 構建一個簡單的分布式系統
從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編寫的,輕量級的,簡單輕巧,並且使用起來非常的方便。