Django中分离的管理员/用户认证系统

9 投票
3 回答
4092 浏览
提问于 2025-04-15 14:41

我最近开始学习和使用Django,想找个办法为管理员和用户设置两个不同的登录系统。我不想重新创建一个全新的认证系统,而是想利用Django自带的功能,比如会话管理和@login_required装饰器等。

具体来说,我想要有两个独立的登录表——一个给管理员,一个给用户。管理员的登录表应该是Django默认生成的表,包含默认字段(比如id, username, email, is_staff, etc.)。而用户的表,我希望只包含5个字段——id, email, password, first_name, last_name。此外,我还想为这两个登录表使用Django自带的会话管理功能,以及在各自的视图中使用@login_required装饰器。最后,我希望为管理员和用户各自有两个不同的登录表单。

有没有人能给我一些建议,或者知道有什么文章/例子可以帮助我实现这个目标?

3 个回答

0

你想稍微改动一下,让用户的用户名前面加个类别前缀吗?不过你没有给我们太多信息,不太清楚你具体想要做什么。其实,你的需求可能可以通过网站的框架来实现,或者直接用两个不同的Django安装。

如果你想把用户登录页面和管理员登录页面分开,那就按照文档里的说明,使用内置的框架来创建一个“用户”登录页面,管理员的页面就不用动了。如果你担心用户会去编辑管理员登录的内容,放心吧,他们不会这样做,除非你允许他们。

1

你可以自己写一个或多个自定义的认证后台。这方面的详细说明可以在这里找到。比如,我就写过一个自定义的后台,用来通过LDAP服务器进行认证。

1

如果我理解你的问题没错(也许我理解错了),你是在问怎么为非管理员用户创建一个单独的登录表单,同时还想使用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也提供了一个通用的模板可以使用)。

关于loginlogoutpassword_change以及其他通用视图的详细文档,可以在Django认证文档中找到。

撰写回答