今日目標:完善myclass,並開始由前端出發 <-> 後台python(tornado)。
day23
帶大家操作python程式碼調試的過程(或說黑修斯自己的測試過程),另外實作python class 類別封裝和基本資料結構連接關係。
- 完善類別 myclass,新增資料庫選擇的引數。
- 網頁前端 與 伺服器後端的通訊實作
程式碼放在 github
程式碼放在 github -> day24/day24_ex1
下列是已經優化好的程式碼,每個def的function基本上都加入了collection的引數,用來選擇資料庫,黑修斯將引數的第一個設為資料集(collection)的選擇。
"""
檔案名稱:day24_ex1 (day23_ex3)
檔案用途:myclass 類別優化,新增資料庫引數接口。
"""
class myclass():
"""docstring for myclass."""
def __init__(self,mydb_Name):
#連接本地端mongoDB
import pymongo
self.myclient = pymongo.MongoClient("mongodb://localhost:27017/")
#設mydb繼承myclient[mydb_Name]的屬性。
self.mydb = self.myclient[mydb_Name]
#你的collection名稱
def show_state(self):
print("目前存在的DB有 ",myclient.list_database_names())
print("目前存在的collection有 ",self.mydb.list_collection_names())
def insert_data(self, collection, data): #新增功能
#實作:新增功能
self.mycol = self.mydb[collection]
self.mydata = data
self.mycol.insert_one(self.mydata) #單筆插入資料指令
print("資料單筆新增成功")
def get_data(self, collection, myquery = {}, noquery={"_id": 0}): #獲得資料
self.mycol = self.mydb[collection]
self.myquery = myquery #要搜尋的資料 空白全部搜尋,填值搜尋特定值。
self.noquery = noquery #要排除的資料
self.myfind = self.mycol.find(myquery)
self.xx = list(self.myfind)
return self.xx
def delete_data(self, collection, mydelete): #實作:會員刪除
self.mycol = self.mydb[collection]
self.mydelete = mydelete
self.mycol.delete_one(self.mydelete)
def updata(self, collection, myquery, new_values): #實作:會員更新
self.mycol = self.mydb[collection]
self.myquery = myquery
self.new_values = new_values
self.mycol.update_one(self.myquery, self.new_values)
# 定義一個新的myclass物件為b
b = myclass(mydb_Name="day21")
#刪除功能
mydelete = { "user_id": "A7654321" }
b.delete_data("main", mydelete)
#更新功能
updata_value = { "name": "黑修斯" }
new_data = { "$set": { "name": "嘿嘿嘿" } }
b.updata("main", updata_value, new_data)
import pprint
pprint.pprint(b.get_data("main"))
目前的myclass的功能與資料庫如下圖所示:
那後續的資料庫流程,就可以自己透過引數(collection)自行選擇資料集。
註:day23中,黑修斯是寫資料庫,我這邊更正。
程式碼放在 github -> day24/day24_ex2
在github中,今天的資料夾中的test_server.py,是之前我們實作的server程式碼,現在新開一個檔案為 day24_ex2.py 貼上 實作的server程式碼 與 myclass,結果如下圖:
指令分析器在通訊中很常會使用到,像是我們自訂暗號,又透過暗號表才能解出意思,指令分析器(parse)就有這個意味。下圖紅框中,是我們要實作程式碼的地方
程式碼中,我改成收到v1與v2各自會印出,在cmd後端中會顯示:
#day24 中修改的----------------
def on_message(self, message): #當訊息進入時,"觸發"
self.xx = message
if (self.xx == "v1"):
print("v1")
elif (self.xx == "v2"):
print("v2")
self.write_message("你輸入的是 " +self.xx)
請直接開請測試頁檔案 day24\one_page_v2.html,直接輸入v1與v2,從後台看是否有出現v1與v2
開始實作分量越來越重了 ,大家加油,明天會再深入了解指令分析器(parse)的設計,與網頁測試頁的優化。