pythonweb搭建
㈠ 如何用python搭建一個最簡單的Web伺服器
用Python建立最簡單的web伺服器
利用Python自帶的包可以建立簡單的web伺服器。在DOS里cd到准備做伺服器根目錄的路徑下,輸入命令:
python -mWeb伺服器模塊[埠號,默認8000]
python -m SimpleHTTPServer 8080
http://localhost:埠號/路徑
http://localhost:8080/index.htm(當然index.htm文件得自己創建)
BaseHTTPServer: 提供基本的Web服務和處理器類,分別是HTTPServer和BaseHTTPRequestHandler。
SimpleHTTPServer: 包含執行GET和HEAD請求的SimpleHTTPRequestHandler類。
CGIHTTPServer: 包含處理POST請求和執行CGIHTTPRequestHandler類。
例如:
然後就可以在瀏覽器中輸入
來訪問伺服器資源。
例如:
其他機器也可以通過伺服器的IP地址來訪問。
這里的「Web伺服器模塊」有如下三種:
㈡ python web開發用什麼框架
對初學者來說,循序漸進是最重要的,我推薦學習 Flask(Welcome | Flask (A Python Microframework))
Flask 很輕,花很少的成本就能夠開發一個簡單的網站。非常適合初學者學習。
Flask 框架學會以後,可以考慮學習插件的使用。例如使用 WTForm + Flask-WTForm 來驗證表單數據,用 SQLAlchemy + Flask-SQLAlchemy 來對你的資料庫進行控制。
BTW:果殼網基於 Flask 開發的。
另外也簡單介紹下其他框架:
1. Django。如樓上所說,是一個全能型框架。目前 Django 的使用面還是很廣的,有學習的價值,但是不建議初學者學習,因為要學習的東西太多了,一下子難以吸收會失去興趣。當然,Django 的目的是為了讓開發者能夠 快速 地開發一個網站,它提供了很多模塊,其中我最喜歡的就是 admin 模塊,http://your.site.com/admin 就進入了網站的後台(內置的哦~)方便地對數據進行操作,等等。。。。因此,如果對 Django 熟悉的話,papapa 一下子就寫好一個網站的原型了。
2. Tornado。傳說中性能高高的框架。Tornado 是一個很好的框架,支持非同步處理的功能,這是它的特點,其他框架不支持。另外一點是,Tornado 的設計似乎更注重 RESTful URL。但 Tornado 提供了網站基本需要使用的模塊外,剩下的則需要開發者自己進行擴展。例如資料庫操作,雖然內置了一個 database 的模塊(後來獨立出去了,現在叫做 torndb,bdarnell/torndb · GitHub)但是不支持 ORM,快速開發起來還是挺吃力的。如果需要 ORM 支持的話,還需要自己寫一層將 SQLAlchemy 和 Tornado 聯系起來,而且這里還有一個坑。
BTW:知乎就是基礎 Tornado 開發的。
3. Bottle。Bottle 和 Flask 都屬於輕量級的 Web 框架。但是 Bottle 似乎落寞了。我覺得跟他的 API 設計有關系。個人認為 Bottle 使用起來不那麼順手,因此也用得少。這里不做太多介紹。
4. web.py。也是很輕的一個框架,使用不多,也不做介紹。
5. web2py。我看樓上都沒有對這個框架做介紹。這個框架是 Google 在 web.py 基礎上二次開發而來的,兼容 GAE 。性能據說很高,曾經用他來做自己的主頁,感覺也還不錯。缺點同樣是對擴展支持不太好,需要自己進行擴展。
6. Quixote。著名的 豆瓣 就是基於 Quixote 開發的。跟上面幾個框架不同,Quixote 的路由會有些特別。另外 Quixote 的性能據說也好。
㈢ (web開發)用python創建一個最簡單的網站
本文,用python來創建一個最簡單的網頁。
1先定返洞義一個函數,用來向網站伺服器發送請求:defyingyong(environ,start_response):start_response(餠OK',[('Content-Type','text/html')])return[b'<h1>HowAre!</h1>']要求網站在網頁上顯示粗體的HowAre!
2導入wsgi模塊的子模塊,用來創建伺服器。fromwsgiref.simple_serverimportmake_server。
3創建伺服器,IP為空,埠號為900。a=900httpd=make_server('',a,yingyong)這個伺服器將調用前面的函數yingyong。
4讓伺服器開始運行,並長時間運行。httpd.serve_forever()forever,讓伺服器永遠運行,除非伺服器被迫關閉。伺服器在哪裡?就在python裡面,關閉python編譯器,就等於關閉了服喚世模務器。
5再訪問步驟一裡面的鏈接,就得到如下網頁。這說明伺服器開始運行了。刷新這個網頁,就相當於重復訪問這個網頁。每訪問一次(刷新一次),都會向伺服器發送請求,在python編譯器裡面會有所體現。
6關閉python編譯器,伺服器也就關閉了,這個網頁會立刻崩潰。再打開python並運行這段代碼,這個網頁又會立刻恢復。完整代碼如下:defyingyong(environ,start_response):start_response(餠OK',[('Content-Type','text/html')])return[b'<h1>HowAre!</h1>']fromwsgiref.simple_serverimportmake_servera=900httpd=make_server('',a,yingyong)httpd.serve_forever()。
1、開始之前,請先用瀏覽器訪問下面這個網頁:l')])
return[b'<h1>HowAre!</h1>']
要求網站在網頁上顯示粗體的HowAre!
3、導入wsgi模塊的子模塊,用來創建伺服器。
fromwsgiref.simple_serverimportmake_server
4、創建伺服器,IP為空,埠號為900。和緩
a=900
httpd=make_server('',a,yingyong)
這個伺服器將調用前面的函數yingyong。
5、讓伺服器開始運行,並長時間運行。
httpd.serve_forever()
forever,讓伺服器永遠運行,除非伺服器被迫關閉。
伺服器在哪裡?就在python裡面,關閉python編譯器,就等於關閉了伺服器。
6、再訪問步驟一裡面的鏈接,就得到如下網頁,這說明伺服器開始運行了。
7、刷新這個網頁,就相當於重復訪問這個網頁,每訪問一次(刷新一次),都會向伺服器發送請求,在python編譯器裡面會有所體現。
8、關閉python編譯器,伺服器也就關閉了,這個網頁會立刻崩潰。
再打開python並運行這段代碼,這個網頁又會立刻恢復。
完整代碼如下:
defyingyong(environ,start_response):
start_response(餠OK',[('Content-Type','text/html')])
return[b'<h1>HowAre!</h1>']
fromwsgiref.simple_serverimportmake_server
a=900
httpd=make_server('',a,yingyong)
httpd.serve_forever()
㈣ 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 框架
1、Django框架
優點:是一個高層次Python Web開發框架,特點是開發快速、代碼較少、可擴展性強。Django採用MTV(Model、Template、View)模型組織資源,框架功能豐富,模板擴展選擇最多。對於專業人員來說,Django是當之無愧的Python排名第一的Web開發框架。
缺點:包括一些輕量級應用不需要的功能模塊,不如Flask輕便。過度封裝很多類和方法,直接使用比較簡單,但改動起來比較困難。相比於 C,C++性能,Django性能偏低。模板實現了代碼和樣式完全分離,不允許模板里出現Python代碼,靈活度不夠。另外學習曲線也相對陡峭。
2、Flask框架
優點:Flask是一個Python Web開發的微框架,嚴格來說,它僅提供Web伺服器支持,不提供全棧開發支持。然而,Flask非常輕量、非常簡單,基於它搭建Web系統都以分鍾來計時,特別適合小微原型系統的開發。花少時間、產生可用系統,是非常劃算的選擇。
缺點:對於大型網站開發,需要設計路由映射的規則,否則導致代碼混亂。對新手來說,容易使用低質量的代碼創建 「不良的web應用程序」。
3、Pyramid框架
優點:是一個擴展性很強且靈活的Python Web開發框架。上手十分容易,比較適合中等規模且邊開發邊設計的場景。Pyramid不提供絕對嚴格的框架定義,根據需求可以擴展開發,對高階程序員十分友好。
缺點:國內知名度不高,高級用法需要通過閱讀源代碼獲取靈感。默認使用Chameleon模板,靈活度沒有成為一個要素。
4、web.py框架
優點:正如其名,web.py是一個採用Python作為開發語言的Web框架,簡單且強大。俄羅斯排名第一的Yandex搜索引擎基於這個框架開發,Guido van Rossum認為這是最好的Python Web框架,還需要說別的嗎?有事實作證、有大牛認可,用起來吧!
缺點:Web.py並未像其他框架一樣保持與Python 3兼容性的最新狀態。這不僅意味著缺乏對非同步語法的支持,還意味著缺少對已棄用的函數的錯誤。此外,目前尚不清楚維護者是否有計劃在Python 2到達其支持生命周期結束後保持Web.py的最新狀態。
5、Tornado框架
優點:Tornado是一個基於非同步網路功能庫的Web開發框架,因此,它能支持幾萬個開放連接,Web服務高效穩定。可見,Tornado適合高並發場景下的Web系統,開發過程需要採用Tornado提供的框架,靈活性較差,確定場景後再考慮使用不遲。
缺點:Tornado 5.0改進了與Python的本機非同步功能的集成。因此不再支持Python 3.3.並且Python 3.5用戶必須使用Python 3.5.2或更高版本。Tornado 6.0將需要Python 3.5及更高版本,並將完全放棄Python 2支持。
㈥ python 怎麼搭建簡單的web伺服器
利用Python自帶的包可以建立簡單的web伺服器。在DOS里cd到准備做伺服器根目錄的路徑下,輸入命令:x0dx0apython -m Web伺服器模塊 [埠號,默認8000]x0dx0a例如:x0dx0apython -m SimpleHTTPServer 8080x0dx0a然後就可以在瀏覽器中輸入x0dx0ah ttp://loca lhost:埠號/路徑x0dx0a來訪問伺服器資源。 x0dx0a例如:x0dx0ah ttp://local host:808 0/index.h tm(當然index.htm文件得自己創建)x0dx0a其他機器也可以通過伺服器的IP地址來訪問。x0dx0ax0dx0a這里的「Web伺服器模塊」有如下三種:x0dx0ax0dx0aBaseHTTPServer: 提供基本的Web服務和處理器類,分別是HTTPServer和BaseHTTPRequestHandler。x0dx0aSimpleHTTPServer: 包含執行GET和HEAD請求的SimpleHTTPRequestHandler類。x0dx0aCGIHTTPServer: 包含處理POST請求和執行CGIHTTPRequestHandler類。
㈦ 如何用Python寫一個web框架
STEP.1
我們首先得選擇基於什麼協議來寫這種框架。我們可以選擇CGI協議,或者是WSGI介面。如果使用CGI,實際上我們只是按著CGI的規范寫了一個python程序,然後每次伺服器收到請求,就fork一個程序來執行它,然後返回一個http文檔,性能比較低下。對於WSGI,而是一個存在於伺服器和應用間的介面,在WSGI之前,web應用都是依賴於伺服器的,現在流行的python框架都支持WSGI介面。
STEP.2 PEP-333
這一段是PEP-333 所提供的樣例代碼。
def simple_app(environ, start_response):
"""Simplest possible application object"""
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)
return ['Hello world!
']
這里的application被傳入了兩個值。
environ
start_response。
environ是一個字典,保存了http請求的信息。
start_response是一個函數,發送http響應。她有兩個參數status 和 start_headers。status必須是由狀態編號和具體信息組成的字元串,必須符合RFC 2616。
start_headers是一個(header_name,header_value) 元組的列表元組列表。其中的hearder_name必須是合法的http header欄位名。在RFC 2616, Section 4.2中有詳細定義。
當然官方還給出了類的實現。- def __init__(self, environ, start_response):
- self.environ = environ
- self.start = start_response
- def __iter__(self):
- status = '200 OK'
- response_headers = [('Content-type','text/plain')]
- self.start(status, response_headers)
- yield "Hello world! "
- urls = [('^/index/$','func_index'),
- ('^/comment/$','func_comment'),
- ('^/environ/$','get_environ'),
- ('^/post/$','post_test')]#urls是提供給app開發者來做鏈接的。
- def getPage(self):
- path = self.environ['PATH_INFO']
- for pattern in self.urls:
- m = re.match(pattern[0],path)#將urls元素的第0項和path進行比對,如果匹配上了,返回函數名
- if m:
- function = getattr(self,pattern[1])#getattr方法來得到函數
- return function()
- return '404 not found'#沒匹配上任何東西
- def getTemplate(self,tem_name,rep=0):
- #這個函數返回內容,tem_name是文件名字
- #參數rep是一個字典,默認為0
- f = open('template/'+tem_name)
- html = f.read()
- if(rep!=0):
- for to_replace in rep:
- strinfo = re.compile('{\%s*'+str(to_replace)+'s*\%}')
- html = strinfo.sub(rep[to_replace],html)
- return html
- environ['wsgi.input'] = sys.stdin
- def getPost(self):
- if(self.environ['REQUEST_METHOD'] == 'POST'):
- try:
- request_body_size = int(self.environ.get('CONTENT_LENGTH', 0))#讀出content_length的值
- except:
- request_body_size = 0
- request_body = self.environ['wsgi.input'].read(request_body_size) #請求的body
- post_data = parse_qs(request_body)#parse_qs是cgi提供的方法,幫助我們處理請求
- return post_data
- import MySQLdb
- class Model(object):
- def __init__(self):
- self.host = 'localhost'
- self.port = 3306
- self.user = 'admin'
- self.passwd = 'admin'
- self.db = 'xieyi'
- def build_connect(self):
- self.conn = MySQLdb.connect(
- host = self.host,
- port = self.port,
- user = self.user,
- passwd = self.passwd,
- db = self.db
- )
- def exec_ins(self,ins):
- cur = self.conn.cursor()
- num = cur.execute(ins)
- info = {}
- if(num>0):
- info = cur.fetchmany(num)
- cur.close()
- self.conn.commit()
- return info
- def close(self):
- self.conn.close()
了解了如上信息後,基本上可以開始了。我們就到官方給的代碼上進行修改吧。
STEP.3 將路徑鏈接到函數
首先我們得把用戶請求的路徑,鏈接到函數。我們可以實現一個getPage方法,專門做這件事。我們所擁有的信息,只有environ['PATH_INFO']。
寫到這里之後,每次添加頁面,就只需要在urls列表中添加一個元祖就行了。
STEP.4 獲取模版
既然是寫web app,模版肯定是得有的。這里我提供了一種getTemplate方法來做這件事。不過我只提供了變數的替換。
STEP.5 POST數據的處理
要想獲取POST數據,我們得通過environ['wsgi.input']來處理。而他實際上就是系統的標准輸入。
知道這點後就很好寫了。
資料庫的鏈接
STEP.6 清理工作
很多配置如果放到代碼中,會增加閱讀負擔。於是把urls,model抽取出來。
使得配置更加方便。