我被困在我的django项目上,我使用了django默认登录系统,这里一切都很好用,我有3个用户,第一个得到一个“管理面板”,第二个得到一个“捕获信息面板”和第三个只能看到其他2个用户打印的内容。
我的问题是:
我需要为每个用户授予哪些权限? 如何将每个面板重定向到各自的用户?
P.S。我已经为每个面板提供了他们的网址和视图的模板,但我不知道如何展示它们。
提前感谢您花时间回答这个新手问题,但我刚开始在一周前使用这个框架。
更新
现在我收到404错误,而不是获取我应该重定向的页面。
这是我的urls.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"),
)
我的观点.py
from django.core.urlresolvers import reverse_lazy
from django.views.generic.base import RedirectView,TemplateView
class PanelRedirectView(RedirectView):
def get_redirect_url(self, *args, **kwargs):
user = self.request.user
if user.groups.filter(name='gerente').count():
return reverse_lazy('panel-gerente')
elif user.groups.filter(name='capturista').count():
return reverse_lazy('panel-capturista')
else:
return reverse_lazy('cliente')
class PanelCapturista(TemplateView):
template_name = 'capturista/panel-capturista.html'
答案 0 :(得分:1)
之类的东西(可能重新发明轮子)
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(...)
答案 1 :(得分:1)
我需要为每个用户授予什么权限?
您在此处想要的是针对每种类型的用户(https://docs.djangoproject.com/en/dev/topics/auth/default/#groups)的组。例如。 “超级用户”,“普通用户”和“受限用户”。可以在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)将用户的请求转发到预期的“面板”视图。
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描述的注释来限制对重定向到的特定视图的访问。我描述的示例使用基于用户组的限制,而他的答案使用基于用户权限的限制。在处理像您所描述的简单权限方案时,这更像是个人偏好。
*更多细节*
要在登录时重定向用户...
在urls.py
中为重定向视图创建一个已命名的网址url(r'^ panel-redirect / $',PanelRedirectView.as_view(),name =“panel-redirect”),
更改settings.py中的LOGIN_REDIRECT_URL以指向登录时的此重定向视图
LOGIN_REDIRECT_URL =反向('panel-redirect')
当该人登录时,他们将被重定向到RedirectView,而RedirectView又会根据他/她指定的组将该人重定向到正确的面板