iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 24
0
Modern Web

三十天全端學習:透過javascript(Onsen UI)、python(tornado)、非關聯式資料庫(mongoDB)完成全端學習,建置web app、mobile app。系列 第 24

三十天全端學習(javascript、python、mongoDB)---第二十四天: python tornado ---實例: 全端連線實戰 V

https://ithelp.ithome.com.tw/upload/images/20181102/20102269lDCy5QsJ7X.jpg

第二十四天: python tornado ---實例: 全端連線實戰 V

今日目標:完善myclass,並開始由前端出發 <-> 後台python(tornado)。


前提概要

day23帶大家操作python程式碼調試的過程(或說黑修斯自己的測試過程),另外實作python class 類別封裝和基本資料結構連接關係。


本文概要

  1. 完善類別 myclass,新增資料庫選擇的引數。
  2. 網頁前端 與 伺服器後端的通訊實作

正文開始

程式碼放在 github

1. 完善類別 myclass,新增資料庫選擇的引數:

程式碼放在 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的功能與資料庫如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20181102/20102269gkANjNvhPy.jpg

那後續的資料庫流程,就可以自己透過引數(collection)自行選擇資料集。
註:day23中,黑修斯是寫資料庫,我這邊更正。

2. 網頁前端 與 伺服器後端的通訊實作

在tornado server的程式碼中加入myclass

程式碼放在 github -> day24/day24_ex2

在github中,今天的資料夾中的test_server.py,是之前我們實作的server程式碼,現在新開一個檔案為 day24_ex2.py 貼上 實作的server程式碼 與 myclass,結果如下圖:

後端接收的parse解析:

指令分析器在通訊中很常會使用到,像是我們自訂暗號,又透過暗號表才能解出意思,指令分析器(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)的設計,與網頁測試頁的優化。


上一篇
三十天全端學習(javascript、python、mongoDB)---第二十三天: python tornado ---實例: 全端連線實戰 IV
下一篇
三十天全端學習(javascript、python、mongoDB)---第二十五天: python tornado ---實例: 全端連線實戰 VI
系列文
三十天全端學習:透過javascript(Onsen UI)、python(tornado)、非關聯式資料庫(mongoDB)完成全端學習,建置web app、mobile app。30

尚未有邦友留言

立即登入留言