簡體   English   中英

Webapp2:使用值初始化響應對象

[英]Webapp2: Initialize the response object with values

有什么方法可以使用某些值初始化response對象,以便使用response對象的其他方法不必重新聲明這些值?

例如, 這是我目前要做的:

class TodoHandler(webapp2.RequestHandler):
    """Handle all the actions of the API"""

    def options(self):
        """Need to re-declare common headers in each method"""
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.headers['Access-Control-Allow-Origin'] = '*'
        self.response.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept'
        self.response.headers['Access-Control-Allow-Methods'] = 'OPTIONS'


    def post(self):
        """Need to re-declare common headers in each method"""
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.headers['Access-Control-Allow-Origin'] = '*'
        self.response.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept'
        self.response.headers['Access-Control-Allow-Methods'] = 'POST'

        new_title = json.loads(self.request.body).get('title')
        self.response.write('Successfully added new todo')

這是我想要創建的:

class TodoHandler(webapp2.RequestHandler):
    """Handle all the actions of the API"""

    def initialize():
        # Set response headers to handle CORS
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.headers['Access-Control-Allow-Origin'] = '*'
        self.response.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept'

    def options(self):
        """Response already initialized, so I only have to declare what I need for this method"""

        self.response.headers['Access-Control-Allow-Methods'] = 'OPTIONS'


    def post(self):
        """Response already initialized, so I only have to declare what I need for this method"""

        self.response.headers['Access-Control-Allow-Methods'] = 'POST'

        new_title = json.loads(self.request.body).get('title')
        self.response.write('Successfully added new todo')

通常,不止一個類處理程序需要共享一些通用方法和響應值,在這種情況下,您將實現自己的RequestHandler類,該類繼承自webapp2.RequestHandler 然后,所有后續的路由/請求處理程序都將從新創建的自定義RequestHandler繼承:

class CustomApiRequestHandler(webapp2.RequestHandler):
    def render_api_json(self, obj):
        self.response.content_type = 'application/json'
        self.response.headers.add_header("Access-Control-Allow-Origin", "*")
        self.response.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept'
        self.response.write(json.encode((self.to_json(obj))))


class TodoHandler(CustomApiRequestHandler):
    def options(self):
        """Response already initialized, so I only have to declare what I need for this method"""
        self.response.headers['Access-Control-Allow-Methods'] = 'OPTIONS'
        return self.render_api_json(...)

    def post(self):
        """Response already initialized, so I only have to declare what I need for this method"""
        self.response.headers['Access-Control-Allow-Methods'] = 'POST'
        return self.render_api_json(...)

請注意,如果所有或許多options / post方法需要通用的標頭/任務/等,則也可以在自定義RequestHandler實現它們,然后在方法的開頭調用super()

暫無
暫無

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

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