diff --git a/playground/main.py b/playground/main.py index 434b85b..93077d0 100644 --- a/playground/main.py +++ b/playground/main.py @@ -36,7 +36,7 @@ def html_example(_request): @router.get('/hello') def get_example(request): logger.info(f'got {request=}') - return web.responses.JsonResponse({'message': 'hello, world!'}) + return web.responses.RedirectResponse('/main') @router.post('/hello', middlewares=[ExampleMiddleware]) diff --git a/web/responses.py b/web/responses.py index 895e548..d218d18 100644 --- a/web/responses.py +++ b/web/responses.py @@ -1,4 +1,5 @@ from enum import Enum +from http import HTTPStatus from webob import Response as _Response from jinja2 import Environment, FileSystemLoader @@ -26,3 +27,22 @@ def __init__(self, template_path: str, context: dict, *args, templates_dir: str template = env.get_template(template_path) rendered_html = template.render(context) super().__init__(*args, body=rendered_html, content_type=ContentType.HTML.value, **kwargs) + + +class RedirectResponse(Response): + def __init__( + self, + location: str, + *args, + body: dict | None = None, + status: HTTPStatus = HTTPStatus.MOVED_PERMANENTLY, + **kwargs, + ): + super().__init__(*args, **kwargs) + self.status = status + self.headers['Location'] = location + + if body: + self.json_body = body + else: + self.body = b""