這個博客系列準備介紹一下使用python語言中的django框架開發出一個接口自動化測試平臺。一來加深本身的印象,溫故而知新,二來但願能夠幫助到其餘想學pythonWeb開發的朋友。css
什麼是web開發呢,其實就是開發一個網站了。那開發網站須要用到哪些知識呢?html
一、python語言基礎,由於用python開發的,因此python指定要會,最起碼你也得會條件判斷,循環,函數,類這些知識;前端
二、html、css的基礎知識,由於要開發網站,網頁都html和css寫的,最起碼這些知識你得會,就算不會寫前端,開發不出來特別漂亮的頁面,網站,最起碼要能看懂html標籤含義;python
三、數據庫基礎知識,由於開發一個網站的話,數據存在哪裏,就是在數據庫裏,那你最起碼要會數據庫的增刪改查吧,要否則怎麼存數據,取數據呢web
上面這些知識會的話,就基本上能夠了,能夠開發一個簡單的小網站就沒有問題了,若是想開發比較大型的網站,業務邏輯比較複雜的,那就得用到其餘的知識了,好比說redis、MQ等等。redis
開發前的準備:sql
一、安裝好 python3.6版本數據庫
下載地址:https://www.python.org/downloads/django
選擇本地系統-並下載python3.6.5python3.x
二、安裝好pycharm,是我們的開發工具
首先,進入 PyCharm 的官網,PyCharm: Python IDE for Professional Developers by JetBrains.
直接點擊DOWNLOAD NOW
,當即下載:
JetBrains 提供了三個版本的 PyCharm,分別爲:Windows
、macOS
和Linux
. 在此,咱們選擇macOS
,點擊DOWNLOAD
:
三、安裝好django,版本2.0.4,使用pip3 install django==2.0.4命令安裝便可
若是沒有pip則經過mac自帶的easy_install安裝,打開終端輸入命令sudo easy_install pip
輸入密碼回車便可.
安裝完pip而後用pip安裝django, 終端命令pip3 install 目錄
等待便可, 安裝成功最後會顯示successful
爲何要用pip3, 由於若是用pip install ... 的話會默認安裝到mac自帶的python2.x版本上,兩個版本的模塊不是互用的因此用pip3執行安裝命令就安裝到了python3.x上
下圖爲已經安裝完成的效果:
四、安裝好navicat或者其餘操做數據庫的可視化工具,由於我們要用到數據庫,要看數據庫、改數據
下載破解版的navicat客戶端
參考網址:https://blog.csdn.net/lzwglory/article/details/64440161
設置鏈接(django項目自帶sqlite數據庫)
便可鏈接成功,進入可視化頁面
全部的web框架、web請求,本質上都是:socket。
HTTP中,瀏覽器充當socket客戶端,一次請求、一次響應,服務就斷開了。
import socket def handle_request(client): buf = client.recv(1024) client.send(b"HTTP/1.1 200 OK\r\n\r\n") client.send(b"Hello, Seven") def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost',8000)) sock.listen(5) while True: connection, address = sock.accept() handle_request(connection) connection.close() if __name__ == '__main__': main()
上述經過socket來實現了其本質,而對於真實開發中的python web程序來講,通常會分爲兩部分:服務器程序和應用程序。服務器程序負責對socket服務器進行封裝,並在請求到來時,對請求的各類數據進行整理。應用程序則負責具體的邏輯處理。爲了方便應用程序的開發,就出現了衆多的Web框架,例如:Django、Flask、web.py 等。
對服務器來講,須要支持各類不一樣框架,對框架來講,只有支持它的服務器才能被開發出的應用使用。這時候,標準化就變得尤其重要。
WSGI(Web Server Gateway Interface)是一種規範,它定義了使用python編寫的web app與web server之間接口格式,實現web app與web server間的解耦。
python標準庫提供的獨立WSGI服務器稱爲wsgiref。
from wsgiref.simple_server import make_server def RunServer(environ, start_response): # environ 客戶端發來的全部數據 # start_response 封裝要返回給用戶的數據(相應頭、相應狀態等) start_response('200 OK', [('Content-Type', 'text/html')]) # 返回的內容 return ['<h1>Hello, web!</h1>'.encode("utf-8"),] # return '<h1>Hello, web!</h1>' # python2版本中 if __name__ == '__main__': httpd = make_server('', 8001, RunServer) print ("Serving HTTP on port 8000...") httpd.serve_forever()
能夠給上面start_response和return處加上斷點,看一下里面的具體內容。
訪問 127.0.0.1:8000/date 斷點顯示能夠看到,「PATH_INFO」 = (str)’/date’
經過python標準庫提供的wsgiref模塊開發一個本身的Web框架
from wsgiref.simple_server import make_server def index(): return [b'index',] def login(): return [b'login',] def routers(): urlpatterns = ( ('/index',index), ('/login',login), ) return urlpatterns def RunServer(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) url = environ['PATH_INFO'] urlpatterns = routers() func = None for item in urlpatterns: if item[0] == url: func = item[1] break if func: return func() else: return [b'404 not found',] if __name__ == '__main__': httpd = make_server('', 8000, RunServer) print ("Serving HTTP on port 8000...") httpd.serve_forever()
在上一步驟中,對於全部的login、index均返回給用戶瀏覽器一個簡單的字符串,在現實的Web請求中通常會返回一個複雜的符合HTML規則的字符串,因此咱們通常將要返回給用戶的HTML寫在指定文件中,而後再返回。如:
index.html
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <h1>Index</h1> </body> </html>
login.html
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <form> <input type="text" /> <input type="submit" /> </form> </body> </html>
修改一、框架代碼裏index和login函數以下
def index():
with open("index.html", 'rb') as f:
data = f.read()
return [data,]
def login():
with open("login.html", 'rb') as f:
data = f.read()
return [data,]
對於上述代碼,雖然能夠返回給用戶HTML的內容以現實複雜的頁面,可是仍是存在問題:如何給用戶返回動態內容?
自定義一套特殊的語法,進行替換
data = data.replace(b'@@@@@', "永不眠".encode('utf-8'))
import time t = str(time.time()) data = data.replace(b'@@@@@', t.encode('utf-8'))
也可把t改成從數據庫裏取得數據
使用開源工具jinja2,遵循其指定語法
對上面不一樣功能的進行歸類存放。好比數據庫操做的都放在Model文件夾、html文件都放在View文件夾、index和login等函數放在Controller文件夾。
把以上三個文件夾首字母連起來,就是MVC。這就是MVC框架:對文件夾分類、對職責的劃分。
還有個MTV(Model、Template、View),名稱不同,職責是同樣的
數據庫操做 模板文件 業務處理
MVC Model View Controller
MTV model Template View
這就是web框架的本質,Django 是基於MTV的web框架