我正在 django 中创建一个应用程序,其中所有身份验证(例如登录注册)都是通过使用外部 REST API 完成的,因此其中不涉及数据库。这就是为什么我在 request.session 中保存登录的用户数据,现在的问题是,如果用户不在 session 中,我不想显示某些页面,我们通常在 django 应用程序中做的是使用 @login_required装饰器,但现在由于没有数据库,那么不向未登录用户显示这些页面的过程是什么。谢谢
最佳答案
您可以定义一个装饰器,它将在 request.sessions
中查找键:
# <i>app_name</i>/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 <b>session_key in request.session</b>:
return view_func(request, *args, **kwargs)
return redirect('<em>name-of-login-view</em>')
return f
if function is not None:
return decorator(function)
return decorator
这里它将检查'user'
是否是request.session
中的键。您当然可以将其更改为不同的 key 。
然后我们对这些 View 使用装饰器:
# app_name/views.py
from app_name.decorators import <strong>session_login_required</strong>
<strong>@session_login_required</strong>
def my_view(request, some, parameters):
# …
关于django - 如何在 django 中创建自定义登录装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71192349/