认证用户Django取决于美国

2024-10-03 02:47:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我被困在我的django项目,我使用django默认登录系统,这里一切都很好,我有3个用户,第一个得到一个“管理面板”,第二个得到一个“捕捉信息面板”,第三个只能看到其他2个用户打印的内容。在

我的问题是:

我需要什么来授予每个用户权限? 如何将每个面板重定向到各自的用户?在

另外,我已经有了每个面板的模板及其URL和视图,但我不知道如何显示它们。在

提前感谢您花时间回答这个新手的问题,但是我一周前才开始使用这个框架。在


更新

现在我得到了一个404错误,而不是得到我应该重定向的页面。在

这是我的网址.py在

from django.conf.urls import patterns, include, url
from .views import PanelRedirectView,PanelCapturista

urlpatterns = patterns('',

url(r'^$' , 'django.contrib.auth.views.login', {'template_name':'inicio/index.html'},
    name='login'),

url(r'cerrar/$' , 'django.contrib.auth.views.logout_then_login', name='logout'),

url(r'^panel-capturista/$' , PanelCapturista.as_view() , name="panel-capturista"),

我的观点

^{pr2}$

Tags: django用户namefromimportauth面板url
2条回答

我需要什么来授予每个用户权限?

在这里,您需要为每种类型的用户(https://docs.djangoproject.com/en/dev/topics/auth/default/#groups)设置一个组。E、 G.“超级用户”、“普通用户”和“受限用户”。可以在Django管理控制台中创建这些组,然后可以使用相同的Django管理控制台(https://docs.djangoproject.com/en/dev/topics/auth/default/#managing-users-in-the-admin)将每个用户分配到各自的组。在

如何将每个面板重定向到各自的用户?

您将需要定义一个RedirectView,它根据用户分配的组(https://docs.djangoproject.com/en/dev/ref/class-based-views/base/#redirectview)将用户的请求转发到预期的“panel”视图。在

from django.core.urlresolvers import reverse
from django.views.generic.base import RedirectView

from articles.models import Article

class PanelRedirectView(RedirectView):

    def get_redirect_url(self, *args, **kwargs):
        user = self.request.user
        if user.groups.filter(name='superuser').count():
            return reverse('superuser-panel')
        elif user.groups.filter(name='regular_user').count():
            return reverse('regular-user-panel')
        else:
            return reverse('restricted-user-panel')

然后可以使用Joran描述的注释来限制对重定向到的特定视图的访问。我描述的示例使用基于限制的用户组,而他的回答使用基于用户权限的限制。在处理类似于您所描述的简单权限方案时,这更多的是个人偏好。在

*更多详情*

要在登录时重定向用户。。。在

  1. 在中为重定向视图创建命名的url网址.py在

    url(r“^panel redirect/$”,PanelRedirectView.as_视图(),name=“panel redirect”),

  2. 在中更改登录\u重定向\u URL设置.py登录时指向此重定向视图

    LOGIN_REDIRECT_URL=reverse('panel-REDIRECT')

当用户登录时,他们将被重定向到RedirectView,而RedirectView又会根据他/她的分配组将其重定向到正确的面板

比如说改头换面

class require_permission:
     def __init__(self,permission,redirect="index/denied_access"):
       self.perm = permission
       self.redirect = redirect

    @require_login
    def __call__(self,f):
        def fn(self,request,*args,**kwargs):
           if not request.user.has_perm(self.perm):
               redirect(self.redirect)
           return f(request,*args,**kwargs)
        return fn

 ...

 @require_permission(PERMISSION.CAN_VIEW_ADMIN,'index/capture_info')
 def admin_view(request,*args,**kw):
     return HttpResponse(...)

 @require_permission(PERMISSION.CAN_CAPTURE_INFO,'index/basic_user')
 def capture_view(request,*args,**kw):
      return HttpRespone(...)

 @require_login
 def basic_view(request,*args,**kw):
      return HttpResponse(...)

相关问题 更多 >