Как создать пользовательские декораторы входа в систему в 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):
# …