/
wezzydev
/
razor
Обзор
Документация
Войти
/
wezzydev
/
razor
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
examples/app.py
94 строки
3 KB
Ivan Graft
dev
06 авг 2026, 22:03
Верифицирован
06 авг 2026, 22:03
6a15ac7
Код
Авторство
О чём код?
#!/usr/bin/env python import asyncio, json from razor import Razor, Response, Request from tortoise import Tortoise from auth import User, Session, AuthMiddleware, login_required, create_session app = Razor() app._request_middleware.append(AuthMiddleware()) @app.on_startup async def init_db(): await Tortoise.init( db_url="sqlite://db.sqlite3", modules={"models": ["auth.models"]}, _enable_global_fallback=True, ) await Tortoise.generate_schemas() print("База данных готова") # <-- это сообщение должно появиться в логах @app.get("/debug") async def debug(request: Request): token = request.headers.get("authorization", "").replace("Bearer ", "") user_id = decode_access_token(token) return Response(f"user_id={user_id}") @app.post("/register") async def register(request: Request): data = await request.json() print("Получены данные:", data) # <-- отладочный вывод username = data.get("username") email = data.get("email") password = data.get("password") if not all([username, email, password]): return Response("Missing fields", status=400) if await User.filter(username=username).exists(): return Response("Username exists", status=400) if await User.filter(email=email).exists(): return Response("Email exists", status=400) user = await User.create_user(username, email, password) tokens = await create_session(user) return Response(json.dumps(tokens), content_type="application/json", status=201) @app.post("/login") async def login(request: Request): data = await request.json() username = data.get("username") password = data.get("password") if not username or not password: return Response("Missing credentials", status=400) user = await User.filter(username=username).first() if not user or not await user.verify_password(password): return Response("Invalid credentials", status=401) tokens = await create_session(user) return Response(json.dumps(tokens), content_type="application/json") @app.post("/refresh") async def refresh(request: Request): data = await request.json() session = await Session.filter(refresh_token=data.get("refresh_token"), is_active=True).first().prefetch_related("user") if not session: return Response("Invalid refresh token", status=401) session.is_active = False await session.save() new_tokens = await create_session(session.user) return Response(json.dumps(new_tokens), content_type="application/json") @app.post("/logout") @login_required async def logout(request: Request): data = await request.json() session = await Session.filter(refresh_token=data.get("refresh_token"), user=request.user).first() if session: session.is_active = False await session.save() return Response("Logged out", status=200) @app.get("/me") @login_required async def me(request: Request): return Response(f"Hello, {request.user.email}!") @app.on_shutdown async def close_db(): await Tortoise.close_connections() if __name__ == "__main__": print("Запуск сервера на http://127.0.0.1:8080") app.run(host="127.0.0.1", port=8080)