真零基礎Python開發web
Python開發web服務的優勢是開發效率高,可能只需要java五分之一的程式碼量。
Python搭建web服務有許多框架,本文介紹Django和bottle兩個框架。
Django
安裝
首先,安裝該框架
安裝成功,版本是1.11.28. 框架的檔案安裝在\python27\Scripts目錄下(搜尋電腦中Python安裝目錄下的Scripts就對了)。
建立專案
先進入\python27\Scripts目錄,建立專案jinanwx(名稱隨便起)
同一個目錄下可以看到新建立工程的目錄
開發自己模組
進入python27\Scripts\jinanwx\jinanwx。新建我們自己的模組
jgotest01.py裡面寫簡單的程式碼如下
模組功能就是返回個json格式結果。
修改urls模組
然後需要改urls.py模組
目錄檔案如下
就這麼簡單,新建一個檔案再修改一個檔案,就成了。
啟動服務
回到上一級目錄啟動服務
啟動成功,瀏覽器訪問試試
bottle
開發功能不是特別複雜的web服務,可以考慮使用bottle框架,它比Django輕量。bottle例子在Linux下演示。
安裝
使用bottle框架首先安裝。一個指令搞定。
# pip install bottle
進入Python命令列import bottle,沒報錯就是成功了。
程式碼
我的web服務就一個檔案bottleweb.py,程式碼如下,一些解釋在程式碼的註釋裡
#coding=utf-8 from bottle import (run, route, get, post, put, delete, request, hook, response, static_file, app) import json import MySQLdb #本例子需要操作資料庫,否則可以不寫這行,這個資料庫包pip估計安裝不會成功,我是用yum install MySQL-python成功的 import sys reload(sys) sys.setdefaultencoding('utf8') import bottle app = bottle.default_app()#處理靜態資源需要定義,沒有靜態資源可以不寫這行 #搭建vue腳手架前後臺聯調時要下面兩個@hook內容,否則會報跨域訪問資源的錯誤 @hook('before_request') def validate(): REQUEST_METHOD = request.environ.get('REQUEST_METHOD') HTTP_ACCESS_CONTROL_REQUEST_METHOD = request.environ.get('HTTP_ACCESS_CONTROL_REQUEST_METHOD') if REQUEST_METHOD == 'OPTIONS' and HTTP_ACCESS_CONTROL_REQUEST_METHOD: request.environ['REQUEST_METHOD'] = HTTP_ACCESS_CONTROL_REQUEST_METHOD @hook('after_request') def enable_cors(): response.headers['Access-Control-Allow-Origin'] = '*' response.headers['Access-Control-Allow-Methods'] = 'GET,POST,PUT,DELETE,OPTIONS' response.headers['Access-Control-Allow-Headers'] = '*' @route('/test2020/dist/<path>')#靜態資源在web服務下的地址,沒放前端的靜態資源這幾個route和app.route可以不寫 def stat(path): return static_file(path, root='./dist/') @app.route('/test2020/dist/static/js/<path>') def js(path): #這幾個目錄我寫成這樣是因為vue打包完後目錄結構就是dist 裡面static等等 return static_file(path, root='./dist/static/js/') @app.route('/test2020/dist/static/css/<path>') def css(path): return static_file(path, root='./dist/static/css/') @get('/test2020/date')#返回某個表中的日期,看sql你就明白了 def helloins(): db = MySQLdb.connect("127.0.0.1", "yourusername", "yourpassword", "yourDBname", charset='utf8' ) cursor = db.cursor() sql = "select DISTINCT date from testtable" print sql cursor.execute(sql) data = cursor.fetchall() jsondata={} results=[] for row in data: result = {} result['DATE'] = row[0] results.append(result) jsondata['code']=0 jsondata['datas']=results return jsondata #返回json格式為了方便前端vue接收處理,其實返回各種型別都可以 @get('/test2020/helloworld') def helloworld(): return 'hello world!' if __name__ == '__main__': run(host='0.0.0.0', port=2020, debug=True, reloader=True)
bottleweb.py所在目錄執行
#python bottleweb.py
web服務就啟動了。瀏覽器訪問http://127.0.0.1:2020/test2020/helloworld看效果。
如果安裝了MySQL資料庫可以測試test2020/date的url是否能返回結果
資料庫只要有下面的資料就可以
前端頁面是這個樣子的,給使用者選擇某個日期。
前端是用vue+vux來開發的,開發完打包打出的東西上傳到程式碼中提到的dist靜態資源目錄下。
如果覺得上面的程式碼有點複雜,可以把所有route, app.route的東西刪除,把/test2020/date語句塊也刪除,把@hook刪除,MySQL的東西刪除,前端的東西也完全不考慮,就是最簡單的bottle web服務,相當於hello world。
建議儘量懂上面的程式碼,涉及了靜態資源,資料庫,是web服務必須的內容。
pip升級的坑
分享一個遇到的pip的問題,我Python版本很低2.6.6。本來通過安裝yum的epel,已經成功安裝了好用的pip。但是每次我用pip命令,最下方都會提示升級
You are using pip version 9.0.3, however version 20.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command
我執行了pip install --upgrade pip升級,然後pip指令就不能用了。而且升級了之後,在想安裝回低版本的pip就沒有對應的安裝包了。yum只能找到20.0.2版本的(老版本會被覆蓋難道?)。
http://bootstrap.pypa.io/2.6/get-pip.py
下載了get-pip.py也無法安裝成功。最後在上面的地址下載到了2.6版本的安裝檔案,才成功安裝可以使用的pip。
總結
相比java,python開發web程式碼量少,需要安裝的庫少,如果能滿足功能和效能要求,python可能是更好的選擇。