Как создать пользовательские декораторы входа в систему в django

Я создаю приложение на django, в котором вся аутентификация, например, регистрация входа, осуществляется с помощью внешнего rest api, поэтому в нем нет базы данных. Поэтому я сохраняю данные залогиненного пользователя в request.session. Теперь проблема в том, что я не хочу показывать некоторые страницы, если пользователь не находится внутри сессии, что мы обычно делаем в приложениях django - используем декоратор @login_required, но теперь, поскольку нет базы данных, какова будет процедура не показывать эти страницы не залогиненным пользователям. спасибо

Вы можете определить декоратор, который будет искать ключ в диапазоне request.sessions:

# app_name/decorators.py

from django.shortcuts import redirect
from functools import wraps

def session_login_required(function=None, session_key='user'):
    def decorator(view_func):
        @wraps(view_func)
        def f(request, *args, **kwargs):
            if session_key in request.session:
                return view_func(request, *args, **kwargs)
            return redirect('name-of-login-view')
        return f
    if function is not None:
        return decorator(function)
    return decorator

здесь он будет проверять, является ли 'user' ключом в request.session. Вы, конечно, можете изменить это на другой ключ.

Затем мы используем декоратор для этих представлений:

# app_name/views.py

from app_name.decorators import session_login_required

@session_login_required
def my_view(request, some, parameters):
    # …
Вернуться на верх