/
stepa228
/
apartment-booking
Обзор
Документация
Войти
/
stepa228
/
apartment-booking
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
core/api.py
78 строк
2 KB
stepa228
Полный проект с CI/CD пайплайном
07 июн 2026, 17:07
07 июн 2026, 17:07
772f8ba
Код
Авторство
О чём код?
from ninja import NinjaAPI, Schema from django.core.signing import Signer from django.contrib.auth import get_user_model from ninja.errors import HttpError from .auth import BearerAuth from users.api import router as users_router from properties.api import router as properties_router from bookings.api import router as bookings_router User = get_user_model() api = NinjaAPI(title="Сервис бронирования квартир", version="1.0.0") api.add_router("/", users_router) api.add_router("/", properties_router) api.add_router("/", bookings_router) class LoginSchema(Schema): username: str password: str class RegisterSchema(Schema): username: str email: str password: str phone: str = "" role: str = "guest" @api.post("/token", auth=None) def get_token(request, data: LoginSchema): try: user = User.objects.get(username=data.username) if user.check_password(data.password): signer = Signer() token = signer.sign(data.username) return { "token": token, "username": user.username, "email": user.email, "is_staff": user.is_staff, "role": user.role } raise HttpError(401, "Неверный логин или пароль") except User.DoesNotExist: raise HttpError(401, "Неверный логин или пароль") @api.post("/register", auth=None) def register(request, data: RegisterSchema): if User.objects.filter(username=data.username).exists(): raise HttpError(400, "Пользователь с таким именем уже существует") if User.objects.filter(email=data.email).exists(): raise HttpError(400, "Пользователь с таким email уже существует") if data.role not in ['guest', 'owner']: raise HttpError(400, "Неверная роль. Допустимо: guest (арендатор) или owner (владелец)") user = User.objects.create_user( username=data.username, email=data.email, password=data.password, phone=data.phone, role=data.role ) signer = Signer() token = signer.sign(data.username) return { "token": token, "username": user.username, "email": user.email, "is_staff": user.is_staff, "role": user.role, "message": "Регистрация успешна" }