[英]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.