Tornado學習之——formdata格式數據傳輸

server.py

tornado 是順序調用的,當其中一個handler(比如post)正在運行還沒返回結果的時候。調用其它handler是沒有反應的,如果需要就得用攜程編程

from tornado import web, ioloop, httpserver
import json
import numpy as np
import cv2


# tornado 是順序調用的,當其中一個handler(比如post)正在運行還沒返回結果的時候。調用其它handler是沒有反應的,如果需要就得用攜程編程

# 按 json 格式傳遞數據
class Request_Json_Handler(web.RequestHandler):

    def post(self):

        app = self.application
        state = app._state
        state = 1

        info_dic = json.loads(self.request.body.encode('utf-8'))
        print(type(info_dic))
        print(info_dic)

        respond_dic = {"code": 1,  "state": state, "msg": "recive json success ..."}

        self.finish(respond_dic)


# 按 formdata 格式傳遞數據
class Request_formdata_Handler(web.RequestHandler):

    def post(self):

        app = self.application
        state = app._state
        state = 2

        sid = self.request.arguments["session_id"][0].encode('utf-8')

        file_metas = self.request.files["pic"]
        for meta in file_metas:
            file_content = meta["body"]
            img = np.frombuffer(file_content, dtype=np.uint8)
            img = cv2.imdecode(img, 1)

        respond_dic = {"code": 1, "state": state, "msg": "recive formdata success ..."}

        self.finish(respond_dic)


# 帶參數請求
class Get_State_Handler(web.RequestHandler):

    def get(self, sid):

        print(sid)

        app = self.application
        state = app._state
        state = 3

        respond_dic = {"code": 1, "state": state, "msg": "recive body success ..."}

        self.finish(respond_dic)


class Application(web.Application):

    def __init__(self):

        handler = [

            (r'/process/request_json', Request_Json_Handler),
            (r'/process/request_formdata', Request_formdata_Handler),
            (r'/process/get_state/?(?P<sid>.+)?', Get_State_Handler)
        ]

        web.Application.__init__(self, handlers=handler)

        # 全局變量
        # 只有寫在這裏纔可以所有handler公用,寫在外面不管用
        self._state = 0


def make_app():

    ioloop_t = ioloop.IOLoop()

    httpserver_t = httpserver.HTTPServer(Application())

    httpserver_t.listen(8889)

    ioloop_t.start()


if __name__ == "__main__":

    make_app()

client.py

import requests
import json


json_url = 'http://172.12.6.61:8889/process/request_json'
formdata_url = 'http://172.12.6.61:8889/process/request_formdata'
get_url = 'http://172.12.6.61:8889/process/get_state'


def request_json():

    info_dic = {"session_id": 1, "motion":"高興"}

    respon = requests.post(json_url, data = json.dumps(info_dic))

    # ???? encode 好像對字典不起作用
    r_dic = json.loads(respon.content.encode('utf-8'))

    print(r_dic)


def request_formdata():

    session_id = 2

    pic_path = "/home/gunn/csdn/1.png"

    formdata = {
        'pic': ('/home/gunn/csdn/1.png', open('/home/gunn/csdn/1.png', 'rb')),
        'session_id': (None, str(session_id)),
    }

    respons = requests.post(formdata_url, files=formdata)

    # ???
    r_dic = json.loads(respons.content.encode('utf-8'))

    print(r_dic)


def get_state():

    session_id = '33'

    url = get_url + '/' + session_id

    respons = requests.get(url)

    r_dic = json.loads(respons.content.decode("utf-8"))

    print(r_dic)



if __name__ == "__main__":

    request_json()

    request_formdata()

    get_state()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章