欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python模塊restful使用方法實例

 更新時間:2013年12月10日 09:47:41   作者:  
這篇文章主要介紹了python模塊restful使用方法,大家參考使用吧

RESTful架構,目前是比較流行的一種互聯(lián)網軟件架構。REST,即Representational State Transfer的縮寫。

說白點就是網站即軟件,再白點就是一個服務軟件支持http的四種方法:

GET用來獲取資源,POST用來新建資源、更新資源,PUT用來更新資源,DELETE用來刪除資源。

并對外提供一個或多個URI,每個URI對應一個資源;客戶端通過URI配合上面的方法就可以和服務

段的軟件交互??蛻舳酥饕菫g覽器,使用restful框架的軟件對http的支持也為了web應用帶來方便。

REST這個詞,是Roy Thomas Fielding在他2000年的博士論文中提出的。他的貢獻很多,

可以了解一下。本人工作的方向是SDN,也算是比較潮的東東,其中floodlight就用到了restful框架。

開發(fā)者為軟件開發(fā)出一些功能,并提供URI api,用戶就可以利用瀏覽器、curl等工具通過提供的URI

從軟件中獲得想要的信息或者設置軟件的功能。

對于發(fā)開者來說,就是提供URI和URI對應的資源,并將他們對應上,類似dicts={'/path?':resource}。

比如重寫http GET方法:首先獲得客戶端請求的url,解析url然后判斷其對應的URI,由于URI與應一個資源,

那么url就可以訪問這個資源了。具體實現(xiàn)上資源也就是方法或者一個類,要看具體實現(xiàn)了。

下面來個很簡單的例子,因為對于真正功能強大的restful來說,這個例子有幾點不足,但是作為簡單的演示,

應該夠了。

復制代碼 代碼如下:

#-*-coding:UTF-8-*-
import socket,sys,urllib
from BaseHTTPServer import *

class Restful(BaseHTTPRequestHandler):  #所有rest的父類
    def __init__(self,request, client_address, server):
        BaseHTTPRequestHandler.__init__(self,request, client_address, server)
        self.dp=None
        self.router=None

    def basepath(self):
        pass
    def getresetlet(self):
        pass
    def send(self,src):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        self.wfile.write(src)
        self.wfile.close()
    def done(self):
        self.dp=self.basepath()
        self.router=self.getrestlet()
class Test(Restful):            #測試1
    def test(self):  #這就是一個資源
        return "{\"date\":\"2013-11-19\"}"
    def do_GET(self):  #重寫get方法給了通過客戶端請求的url找到對應的資源
        self.done()
        for key in self.router.keys():
            tmp=self.dp+key
            if tmp in self.path:
                  self.send(self.router[key]()) #執(zhí)行資源
    def basepath(self): #這個簡單的說就是和下面函數(shù)中的路徑配合,即/wm/time
        return "/wm"
    def getrestlet(self):  #這兒就是URI與資源對應,這里只有test資源,可以注冊多個
        rr={}
        rr['/time']=self.test
          return rr
class testjson(Restful):      #測試2
    def testjson(self,vpc,vr):  #這里比測試1復雜些,因為參數(shù)的值需要從url中獲得
        src1="{\"vpc\":1,\"vrouter\":3,\"day\":[1,2,3]}"
        src2="{\"vpc\":1,\"vrouter\":4,\"day\":[23,21,3]}"
        src3="{\"vpc\":5,\"vrouter\":3,\"day\":[13,2,23]}"
        tlist=[src1,src2,src3]
        cmpvpc="\"vpc\":"+vpc
        cmpvr="\"vrouter\":"+vr
        for k in tlist:
            if cmpvpc in k and cmpvr in k:
                return k
    def firewall(self):
        return "{\"filter\":[\"baid.com/\",\"c.cn/\"],\"acl\":{\"accept\":123,\"reject\":321}}"
    def do_GET(self):  #重寫GET,解析url,這里的self.path類似:/ins/json?vpc=1&vrouter=3
        self.done()
        print self.path
        if 'vpc' in self.path and 'vrouter' in self.path:
            query=None
            if '?' in self.path:
                query =    urllib.splitquery(self.path)
            key=query[0]+'?'
            param=query[1].split('&') #解析獲得屬性信息,傳遞給資源函數(shù)
            pdict={}
            for p in param:
                tmp=p.split('=')
                pdict[tmp[0]]=tmp[1] 
            for k in self.router.keys():
                if k in key:
                    self.send(self.router[k](pdict['vpc'],pdict['vrouter'])) #執(zhí)行資源
        elif 'firewall' in self.path:
            self.send(self.router['/firewall']())
        else:
            self.send("{}")
    def basepath(self):
        return "/ins"
    def getrestlet(self):
        rr={}
        rr['/json?']=self.testjson #注冊資源
        rr['/firewall']=self.firewall
        return rr

           
try:
    server=HTTPServer(('',8084),testjson) #測試2
    server.serve_forever()
except KeyboardInterrupt:
    sys.exit(0)

如果運行上面的程序,運行的是測試2,運行后此程序監(jiān)聽8084。

此時在瀏覽器地址欄輸入http://127.0.0.1:8084/ins/json?vpc=1&vrouter=3

得到如下圖,本人使用的chrome,安裝插件后的效果。

這里僅僅作為演示,程序有有許多不足。對于好的框架,注冊資源不應該和資源在同一個類中,

basepath()與getrestlet()不應該在實現(xiàn)的資源類里(也就是上面的測試里),也使router沒起作用。

應該在另一個類里注冊,這樣可以通過不同的URI,兩個測試都應該能夠運行;還有就是使用的python自帶的BaseHTTPServer模塊,并不適合做restful。

但是工作過程大體就是這樣,后續(xù)有時間會寫個python版的restful簡易框架。

相關文章

  • 分享一下Python 開發(fā)者節(jié)省時間的10個方法

    分享一下Python 開發(fā)者節(jié)省時間的10個方法

    在這篇文章,我想強調一些 Python 可以節(jié)約時間并最大限度地提高生產力的方面。在做準備時,我咨詢了幾個 Pythonists,他們最節(jié)省時間的技巧是什么?答案在這里
    2015-10-10
  • django-filter和普通查詢的例子

    django-filter和普通查詢的例子

    今天小編就為大家分享一篇django-filter和普通查詢的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python+OpenCV讀寫視頻的方法詳解

    Python+OpenCV讀寫視頻的方法詳解

    這篇文章主要為大家詳細介紹了Python+OpenCV進行讀寫視頻操作的示例代碼,文中的示例代碼講解詳細,感興趣的小伙伴可以動手嘗試一下
    2022-08-08
  • Python實現(xiàn)葵花8號衛(wèi)星數(shù)據(jù)自動下載實例

    Python實現(xiàn)葵花8號衛(wèi)星數(shù)據(jù)自動下載實例

    這篇文章主要為大家介紹了Python實現(xiàn)葵花8號衛(wèi)星數(shù)據(jù)自動下載實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • OpenCV實現(xiàn)圖片亮度增強或減弱

    OpenCV實現(xiàn)圖片亮度增強或減弱

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)圖片亮度增強或減弱,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • python筆記(2)

    python筆記(2)

    python筆記,參考上一篇文章大家繼續(xù)
    2012-10-10
  • 《Python之禪》中對于Python編程過程中的一些建議

    《Python之禪》中對于Python編程過程中的一些建議

    這篇文章主要介紹了《Python之禪》中對于Python編程過程中的一些建議,需要的朋友可以參考下
    2015-04-04
  • Python之列表推導式最全匯總(中篇)

    Python之列表推導式最全匯總(中篇)

    這篇文章主要介紹了Python之列表推導式最全匯總(中篇),本文章內容詳細,通過案例可以更好的理解列表推導式的相關知識,本模塊分為了三部分,本次為中篇,需要的朋友可以參考下
    2023-01-01
  • Python基于GDAL鑲嵌拼接遙感影像

    Python基于GDAL鑲嵌拼接遙感影像

    這篇文章主要介紹了Python基于GDAL鑲嵌拼接遙感影像, 這里有一點需要注意的就是,用這個方法進行鑲嵌拼接操作時,影像有一條明顯的拼接線,不知道是不是我數(shù)據(jù)的問題,你們可以自己嘗試一下,只要修改主函數(shù)中的路徑即可,需要的朋友可以參考下
    2023-10-10
  • 基于Python對數(shù)據(jù)shape的常見操作詳解

    基于Python對數(shù)據(jù)shape的常見操作詳解

    今天小編就為大家分享一篇基于Python對數(shù)據(jù)shape的常見操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12

最新評論