我有 2 个应用程序,注册和相册。如果用户访问“/”或“/home”,那么他们应该看到注册/登录表单或他们的相册管理页面,具体取决于用户是否登录。
对于如何在 2 个不同的应用程序之间分派类似的 URL,是否有既定的最佳实践?有没有办法构建这个,这样任何一个应用程序都不需要知道另一个?
谢谢!
我有 2 个应用程序,注册和相册。如果用户访问“/”或“/home”,那么他们应该看到注册/登录表单或他们的相册管理页面,具体取决于用户是否登录。
对于如何在 2 个不同的应用程序之间分派类似的 URL,是否有既定的最佳实践?有没有办法构建这个,这样任何一个应用程序都不需要知道另一个?
谢谢!
如果您的需求仅限于在用户未登录时显示登录表单与在用户未登录时显示“主页”,我建议您使用“需要登录”装饰器。
from django.contrib.auth.decorators import login_required
@login_required
def show_home(request):
"""
Show home page...
"""
...
这个装饰器可以应用在视图级别(如上所示)或 urls.py 中(如下所示):
url(r'^reports/', login_required(ListView.as_view(
template_name="...",
queryset = ...,
context_object_name = ...
))),
第二种模式通常用于通用视图和基于类的视图。
这两种解决方案都假定您正在连接到 Django 的内置登录/注册设备(在需要时使用自定义模板和自定义视图)。如果您使用的是自定义注册/身份验证框架,那么使用装饰器模式仍然是一个好主意。
如果您设置LOGIN_URL
为/registration/login
,并用 装饰您的/
视图@login_required
,那么它们将自动被重定向。
当用户登录时,将变量添加到会话并在 / 或 /home 请求中检查它。