def route(self, request: HttpRequest):
"""
Prepares for the CallBackResolver and handles the response and exceptions
:param request HttpRequest
:rtype: HttpResponse
"""
self.flush()
self.__request = request
self.__uri = request.path[1:]
self.__method = request.method
self.__bound_routes = dict()
self.register('log', logging.getLogger(os.urandom(3).hex().upper()))
self.register('router', RouteMapping())
self.__app['router'].flush_routes()
routes = self.__callable().connect(self.__app)
self.__bound_routes = routes['router'].get__routes()
request_headers = request.META
if 'HTTP_USER_AGENT' in request_headers:
indent = 2 if re.match("[Mozilla]{7}", request_headers['HTTP_USER_AGENT']) else 0
else:
indent = 0
if self.set_end_point_uri() is False:
return self.set_response_headers(self.no_route_found(self.__request).render(indent))
acutal_params = self.get_url_params(self.get_end_point_uri())
try:
response = self.exec_route_callback(acutal_params)
if type(response) == Response:
return self.set_response_headers(response.render(indent))
else:
return self.set_response_headers(response)
except InvalidInputException:
self.__app['log'].error("< 400", exc_info=True)
return self.set_response_headers(Response(None, status=400).render(indent))
except AuthException as e:
self.__app['log'].error("< 403", exc_info=True)
return self.set_response_headers(Response(None, status=403).render(indent))
except NotFoundException:
self.__app['log'].error("< 404", exc_info=True)
return self.set_response_headers(Response(None, status=404).render(indent))
except RequestDataTooBig:
self.__app['log'].error("< 413", exc_info=True)
return self.set_response_headers(Response(None, status=413).render(indent))
except BaseException as e:
self.__app['log'].error("< 500", exc_info=True)
return self.set_response_headers(Response(None, status=500).render(indent))
finally:
del self
评论列表
文章目录