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

python模塊restful使用方法實(shí)例

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

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

說白點(diǎn)就是網(wǎng)站即軟件,再白點(diǎn)就是一個(gè)服務(wù)軟件支持http的四種方法:

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

并對外提供一個(gè)或多個(gè)URI,每個(gè)URI對應(yīng)一個(gè)資源;客戶端通過URI配合上面的方法就可以和服務(wù)

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

REST這個(gè)詞,是Roy Thomas Fielding在他2000年的博士論文中提出的。他的貢獻(xiàn)很多,

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

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

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

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

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

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

下面來個(gè)很簡單的例子,因?yàn)閷τ谡嬲δ軓?qiáng)大的restful來說,這個(gè)例子有幾點(diǎn)不足,但是作為簡單的演示,

應(yīng)該夠了。

復(fù)制代碼 代碼如下:

#-*-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):  #這就是一個(gè)資源
        return "{\"date\":\"2013-11-19\"}"
    def do_GET(self):  #重寫get方法給了通過客戶端請求的url找到對應(yīng)的資源
        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): #這個(gè)簡單的說就是和下面函數(shù)中的路徑配合,即/wm/time
        return "/wm"
    def getrestlet(self):  #這兒就是URI與資源對應(yīng),這里只有test資源,可以注冊多個(gè)
        rr={}
        rr['/time']=self.test
          return rr
class testjson(Restful):      #測試2
    def testjson(self,vpc,vr):  #這里比測試1復(fù)雜些,因?yàn)閰?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)

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

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

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

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

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

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

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

相關(guān)文章

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

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

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

    django-filter和普通查詢的例子

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

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

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

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

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

    OpenCV實(shí)現(xiàn)圖片亮度增強(qiáng)或減弱

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

    python筆記(2)

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

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

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

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

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

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

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

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

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

最新評論