最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python模塊restful使用方法實例

 更新時間: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)就是一個服務(wù)軟件支持http的四種方法:

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

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

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

REST這個詞,是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)一個資源,

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

下面來個很簡單的例子,因為對于真正功能強(qiáng)大的restful來說,這個例子有幾點(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):  #這就是一個資源
        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): #這個簡單的說就是和下面函數(shù)中的路徑配合,即/wm/time
        return "/wm"
    def getrestlet(self):  #這兒就是URI與資源對應(yīng),這里只有test資源,可以注冊多個
        rr={}
        rr['/time']=self.test
          return rr
class testjson(Restful):      #測試2
    def testjson(self,vpc,vr):  #這里比測試1復(fù)雜些,因為參數(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。

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

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

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

basepath()與getrestlet()不應(yīng)該在實現(xiàn)的資源類里(也就是上面的測試?yán)铮彩箁outer沒起作用。

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

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

相關(guān)文章

  • python traceback捕獲并打印異常的方法

    python traceback捕獲并打印異常的方法

    這篇文章主要介紹了python traceback捕獲并打印異常的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • python如何使用base加密解密

    python如何使用base加密解密

    base編碼是一種加密解密措施,目前常用的有base16、base32和base64,以base64為例,base64加密后共有64中字符,本文給大家分享python使用base加密解密的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • Python Tornado批量上傳圖片并顯示功能

    Python Tornado批量上傳圖片并顯示功能

    Tornado龍卷風(fēng)是一個開源的網(wǎng)絡(luò)服務(wù)器框架,它是基于社交聚合網(wǎng)站FriendFeed的實時信息服務(wù)開發(fā)而來的。這篇文章主要介紹了Python Tornado批量上傳圖片并顯示,需要的朋友可以參考下
    2020-03-03
  • 淺談python新式類和舊式類區(qū)別

    淺談python新式類和舊式類區(qū)別

    python的新式類是2.2版本引進(jìn)來的,我們可以將之前的類叫做經(jīng)典類或者舊式類。這篇文章主要介紹了淺談python新式類和舊式類區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Python函數(shù)學(xué)習(xí)筆記

    Python函數(shù)學(xué)習(xí)筆記

    Python探測局部作用域的時候:是在python編譯代碼時檢測,而不是通過他們在運(yùn)行時的賦值。
    2008-10-10
  • Pip install和Conda install的使用

    Pip install和Conda install的使用

    本文主要介紹了Pip install和Conda install的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 使用Pandas的Series方法繪制圖像教程

    使用Pandas的Series方法繪制圖像教程

    今天小編就為大家分享一篇使用Pandas的Series方法繪制圖像教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python爬蟲 Pyppeteer使用方法解析

    python爬蟲 Pyppeteer使用方法解析

    這篇文章主要介紹了python爬蟲 Pyppeteer使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • selenium獲取元素定位的方法總結(jié)(動態(tài)獲取元素)

    selenium獲取元素定位的方法總結(jié)(動態(tài)獲取元素)

    要想操作一個元素,首先應(yīng)該識別這個元素,人有各種的特征(屬性),可以通過其特征找到人,同理,界面的某個元素會有各種的特征(屬性),可以通過這個屬性找到這對象,本文給大家介紹了python?selenium獲取元素定位的8種方法,需要的朋友可以參考下
    2024-02-02
  • Python 異常處理的實例詳解

    Python 異常處理的實例詳解

    這篇文章主要介紹了Python 異常處理的實例詳解的相關(guān)資料,希望通過本文能幫助到大家掌握Python 異常的知識,需要的朋友可以參考下
    2017-09-09

最新評論

黔南| 芒康县| 峡江县| 玉环县| 兴山县| 平谷区| 那曲县| 茶陵县| 新巴尔虎左旗| 尼勒克县| 呼图壁县| 明溪县| 阳泉市| 永宁县| 平潭县| 吐鲁番市| 灵川县| 平遥县| 武胜县| 盐城市| 龙州县| 荔波县| 东乌珠穆沁旗| 志丹县| 绥化市| 蒲江县| 仙桃市| 水富县| 托里县| 寿宁县| 安龙县| 民乐县| 伊金霍洛旗| 桐乡市| 微博| 徐汇区| 肃北| 凉城县| 大洼县| 南投县| 禄劝|