Django中分离的管理员/用户认证系统
我最近开始学习和使用Django,想找个办法为管理员和用户设置两个不同的登录系统。我不想重新创建一个全新的认证系统,而是想利用Django自带的功能,比如会话管理和@login_required装饰器等。
具体来说,我想要有两个独立的登录表——一个给管理员,一个给用户。管理员的登录表应该是Django默认生成的表,包含默认字段(比如id, username, email, is_staff, etc.
)。而用户的表,我希望只包含5个字段——id, email, password, first_name, last_name
。此外,我还想为这两个登录表使用Django自带的会话管理功能,以及在各自的视图中使用@login_required装饰器。最后,我希望为管理员和用户各自有两个不同的登录表单。
有没有人能给我一些建议,或者知道有什么文章/例子可以帮助我实现这个目标?
3 个回答
你想稍微改动一下,让用户的用户名前面加个类别前缀吗?不过你没有给我们太多信息,不太清楚你具体想要做什么。其实,你的需求可能可以通过网站的框架来实现,或者直接用两个不同的Django安装。
如果你想把用户登录页面和管理员登录页面分开,那就按照文档里的说明,使用内置的框架来创建一个“用户”登录页面,管理员的页面就不用动了。如果你担心用户会去编辑管理员登录的内容,放心吧,他们不会这样做,除非你允许他们。
你可以自己写一个或多个自定义的认证后台。这方面的详细说明可以在这里找到。比如,我就写过一个自定义的后台,用来通过LDAP服务器进行认证。
如果我理解你的问题没错(也许我理解错了),你是在问怎么为非管理员用户创建一个单独的登录表单,同时还想使用Django的标准认证机制,比如User
模型等等。Django本身就支持这个功能,通过django.contrib.auth.views
里的视图来实现。
你可以从django.contrib.auth.views.login
开始。然后在你的url配置里加一行,像这样:
(r'^/login/$', 'django.contrib.auth.views.login', {'template_name': 'myapp/login.html'})
这个login
通用视图接受一个叫template_name
的参数,这个参数是你自定义登录模板的路径(Django也提供了一个通用的模板可以使用)。
关于login
、logout
、password_change
以及其他通用视图的详细文档,可以在Django认证文档中找到。