簡體   English   中英

如何將所有參數放入 webapp2 中的數據結構(list/dict/etc)中

[英]How to get all parameters into a data structure (list/dict/etc) in webapp2

我正在編寫一個簡單的 webapp2 腳本,它接收傳遞給它的參數並輸出結果。 最終,我想將這些參數傳遞給特定的函數,具體取決於發出的請求類型。

代碼:

class partyHandler(webapp2.RequestHandler):
    def get(self, requestType):
        PROCESS = partyRequests();
        self.response.headers['Content-Type'] = 'text/plain'

    #Here's where I would normally request the paramters,
    #There's too many to list
    #EX:
    # name = cgi.escape(self.request.get('name'))
    #
    options = {
        'create':   PROCESS.createParty,
        'retrieve': PROCESS.retrieveParty,
        'update':   PROCESS.updateParty,
        'delete':   PROCESS.deleteParty,
        'join':     PROCESS.joinParty,
        'broadcast':PROCESS.broadcastParty,
        'leave':    PROCESS.leaveParty,
    }
    #THE PARAMETERS WOULD BE PASSED TO ANY FUNCTION ABOVE DEPENDING ON requestType.
    return self.response.write(options[requestType](<PARAMS>))

app = webapp2.WSGIApplication([
('/party/(create|retrieve|update|delete|broadcast|join|leave)/', partyHandler)
], debug=True)

如您所見,不是每次向腳本發出請求時我都不需要對參數值進行冗余請求,而是有沒有辦法將所有參數收集到數據結構(列表/字典)中並將其傳遞給職能?

編輯

澄清一下,我的意思是函數 create 需要參數:

name
partyImg
latitudeRestaurant
longitudeRestaurant
address

函數檢索需要參數:

partyId

我之前的方法是這樣做的:

#IF I'M CALLING retrieve, THESE ARE POINTLESS
name = cgi.escape(self.request.get('name'))
partyImg = cgi.escape(self.request.get('partyImg'))
latitudeRestaurant = cgi.escape(self.request.get('latitudeRestaurant'))
longitudeRestaurant = cgi.escape(self.request.get('longitudeRestaurant'))
address = cgi.escape(self.request.get('address'))

#IF I'M CALLING create, THESE ARE POINTLESS
partyId = cgi.escape(self.request.get('partyId'))


options = {
    'create':   PROCESS.createParty(name, partyImg,latitudeRestaurant,longitudeRestaurant,address),
    'retrieve': PROCESS.retrieveParty(partyId)
}

我不想請求單個參數,而是將所有參數放入數據結構中並將其傳遞給函數。

我相信您希望用 *args 和 **kwargs 做點什么。

這是關於它的信息: **(雙星)和 *(星)對參數有什么作用?

最終,使用 args 和 kwargs,它們接受任意參數集合,並且根據傳遞給的對象,您可以在該方法中驗證您期望的參數。

因此,例如,對於您的方法之一,例如 create,您需要參數 x 和 y,那么您的 create 可能如下所示:

def create(*args, **kwargs):
 ## check for parameters x and y is available in kwargs here and proceed

查看請求的 webapp2 文檔,我發現這有效:

class partyHandler(webapp2.RequestHandler):
    def get(self, requestType):
        PROCESS = partyRequests();
        self.response.headers['Content-Type'] = 'text/plain'

    options = {
        'create':   PROCESS.createParty,
        'retrieve': PROCESS.retrieveParty,
        'update':   PROCESS.updateParty,
        'delete':   PROCESS.deleteParty,
        'join':     PROCESS.joinParty,
        'broadcast':PROCESS.broadcastParty,
        'leave':    PROCESS.leaveParty
    }
    self.response.write(options[requestType](self.request.GET)) <--THIS WORKS

當這些方法被調用時,它看起來像這樣:

def create(self, args):
    username = args['username']
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM