根据登录用户django显示不同的内容

2023-12-05

所以我上周末刚刚学习了Python/Django。我想做的是根据登录者的不同提供具有不同内容的 url 路由。所以我的用例是我创建 5 个用户名/密码,然后这 5 个用户可以登录以阅读适合他们的特定内容/路由,而没有其他用户可以使用用户应该能够看到。

现在我有了这些具有相关视图的路线。

urlpatterns = [
    url(r'^$', accounts.views.loginview),
    url(r'^accounts/', include('accounts.urls')),
    url(r'^sitepages/', include('sitepages.urls')),
]

我得到了身份验证的东西,我正在过滤内容,仅使用 @login_required 登录的用户,它看起来像这样:

from django.shortcuts import render
from django.contrib.auth.decorators import login_required

@login_required
def attributes(request):
    return render(request, 'sitepages/something.html')

我研究了如何根据用户等拥有不同的菜单栏。但我无法找到如何根据用户拥有完全不同的路线和内容页面。

我认为我需要使用 Django 中的组来完成此操作,并且我认为我需要使用用户的外键来满足内容。我使用管理员创建了一个组,但我很难巩固下一步。

这些是我检查过的资源:

Django数据库根据当前登录用户进行路由

Django 将页面限制为某些用户

https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Authentication

https://docs.djangoproject.com/en/1.10/topics/auth/default/

我使用的是Python 3.6.0版本; Django 版本 1.10.6


我最近做了类似的事情,只是实现了一个简单的高阶函数来做到这一点。我的用例是为登录用户和未登录用户提供单独的视图。

只需编写一个包装函数来根据一些参数选择要渲染的视图:

def logged_in_switch_view(logged_in_view, logged_out_view):

    def inner_view(request, *args, **kwargs):
        if request.user.is_authenticated:
            return logged_in_view(request, *args, **kwargs)
        return logged_out_view(request, *args, **kwargs)

    return inner_view

然后在urlpatterns:

from .views import LoggedInHome, PublicHome
from .view_wrappers import logged_in_switch_view

urlpatterns = [
    path('', logged_in_switch_view(
        LoggedInHome.as_view(), PublicHome.as_view()
    )),
]

你可以调整一下logged_in_switch_view看看谁是真正的用户并进行适当的切换,应该是相当明显的。好处是你应该能够传递受保护的基本视图@login_required并获得同样的保护,作为双重检查。

到目前为止似乎工作得很好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据登录用户django显示不同的内容 的相关文章

随机推荐