def from_http(self, request):
self.total = None
self.success = None
self.errors = []
self.params = None
self.output = None
self.pagination = None
self.limit = None
self.offset = None
if not isinstance(request, web.Request):
raise web.HTTPBadRequest()
self.meta = {
'cookies': getattr(request, 'cookies', {}),
'headers': getattr(request, 'headers', {})
}
req_params = {}
# if GET or DELETE we read a query params
if request.method in (METH_GET, METH_DELETE):
req_params = self.process_request(request.GET)
# else we read a POST-data
elif request.method in (METH_PUT, METH_POST):
try:
req_params = self.process_request(await request.json())
except (ValueError, TypeError):
req_params = self.process_request(await request.post())
# Here we add or override params by PATH-params.
# If it exist
if request.match_info:
req_params.update(request.match_info.copy())
self.limit = get_int_or_none(request.headers.get('X-Limit')) or \
get_int_or_none(req_params.pop('limit', None)) or \
get_int_or_none(request.app.settings.LIMIT)
self.offset = get_int_or_none(request.headers.get('X-Offset')) or \
get_int_or_none(req_params.pop('offset', None)) or \
get_int_or_none(request.app.settings.OFFSET)
self.params = self.validate_params(req_params)
self.result = []
self.app = request.app
self.settings = request.app.settings
评论列表
文章目录