Django 可以将所需的登录应用于整个应用程序吗?
有没有一种方法可以将Django 可以将所需的登录应用于整个应用程序吗?,django,Django,有没有一种方法可以将login\u requireddecorator应用于整个应用程序?当我说“app”时,我指的是django意义上的应用程序,也就是说一组URL和视图,而不是整个项目。我认为您正在寻找包含所需登录名的应用程序。是的,您应该使用中间件 尝试查看存在一些差异的解决方案: -例外情况清单 -例外情况清单 -与登录所需URL列表相反 -最简单 这是一个老问题。但这里有: 这是URLConf中包含的的替代。p将login\u required应用于整个应用程序是否有效。我想知道是
login\u required
decorator应用于整个应用程序?当我说“app”时,我指的是django意义上的应用程序,也就是说一组URL和视图,而不是整个项目。我认为您正在寻找包含所需登录名的应用程序。是的,您应该使用中间件
尝试查看存在一些差异的解决方案:
- -例外情况清单
- -例外情况清单
- -与登录所需URL列表相反
- -最简单
这是一个老问题。但这里有:
这是URLConf中包含的的替代。p将
login\u required
应用于整个应用程序是否有效。我想知道是否有任何解决方案可以使其像这样工作:
/app/app.py
class AppConfig(AppConfig):
login_required = True
/project/urls.py
urlpatterns = [
url(r'app/', include('app.urls', namespace='app'))
]
/common/middleare.py
def LogMiddleware(get_response):
def middleware(request):
# solution 1
app = get_app(request)
if app.login_required is True and request.is_authenticated is Fasle:
return HttpResponseRedirect(redirect_url)
# solution 2
url_space = get_url_space(request.get_raw_uri())
if url_space.namespace in ['app', 'admin', 'staff', 'manage'] and \
request.is_authenticated is False:
return HttpResponseRedirect(redirect_url)
我将检查是否有任何方法可以获取请求的应用程序或url名称。我认为它看起来更漂亮。从Django 3+开始,您可以通过应用中间件将login_require()设置为整个应用程序。你喜欢以下几点: 步骤1:在yourapp目录中创建一个新文件anywhere.py,并编写以下内容: 步骤2:将这个anythis.py添加到project/settings.py中的中间件[],如下所示 步骤3:还将以下代码段添加到project/settings.py中
+1-我本打算问同样的问题。###从Django 3+开始##
import re
from django.conf import settings
from django.contrib.auth.decorators import login_required
//for registering a class as middleware you at least __init__() and __call__()
//for this case we additionally need process_view() which will be automatically called by Django before rendering a view/template
class ClassName(object):
//need for one time initialization, here response is a function which will be called to get response from view/template
def __init__(self, response):
self.get_response = response
self.required = tuple(re.compile(url) for url in settings.AUTH_URLS)
self.exceptions = tuple(re.compile(url)for url in settings.NO_AUTH_URLS)
def __call__(self, request):
//any code written here will be called before requesting response
response = self.get_response(request)
//any code written here will be called after response
return response
//this is called before requesting response
def process_view(self, request, view_func, view_args, view_kwargs):
//if authenticated return no exception
if request.user.is_authenticated:
return None
//return login_required()
for url in self.required:
if url.match(request.path):
return login_required(view_func)(request, *view_args, **view_kwargs)
//default case, no exception
return None
MIDDLEWARE = [
// your previous middleware
'yourapp.anything.ClassName',
]
AUTH_URLS = (
//disallowing app url, use the url/path that you added on mysite/urls.py (not myapp/urls.py) to include as your app urls
r'/your_app_url(.*)$',
)