在 Django 中实现选择角色登录的功能,可以通过使用 Django 自带的 User 模型和自定义用户模型来实现。下面我将为您提供一个示例代码来详细描述这个过程。
假设我们有两种用户角色:普通用户和管理员用户。我们将使用 Django 自带的 User 模型来管理普通用户,同时创建一个自定义的用户模型来管理管理员用户。
首先,创建一个新的 Django 项目,并在项目文件夹中创建一个新的应用,名为"accounts"。然后,在"accounts"应用中创建一个自定义的用户模型。
创建自定义用户模型:在"accounts/models.py"文件中定义管理员用户模型,我们可以扩展 AbstractUser 来添加一些额外的字段:
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
# 添加一些额外的字段,用于区分角色或存储其他用户相关信息
is_admin = models.BooleanField(default=False)
# 添加其他字段...
def __str__(self):
return self.username
在项目的 settings.py 中配置自定义用户模型: 找到 settings.py 文件,并将我们新创建的 CustomUser 模型配置为 Django 项目中的用户模型。
# settings.py
AUTH_USER_MODEL = 'accounts.CustomUser'
创建登录视图和模板: 在"accounts/views.py"文件中创建登录视图,并在"accounts/templates/accounts"目录下创建 login.html 模板。
# accounts/views.py
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
if user.is_admin:
return redirect('admin_dashboard') # 跳转到管理员用户的仪表盘
else:
return redirect('user_dashboard') # 跳转到普通用户的仪表盘
else:
error_message = 'Invalid login credentials'
return render(request, 'accounts/login.html', {'error_message': error_message})
return render(request, 'accounts/login.html')
创建仪表盘视图和模板: 在"accounts/views.py"文件中创建两个仪表盘视图:user_dashboard 和 admin_dashboard,并在"accounts/templates/accounts"目录下分别创建 user_dashboard.html 和 admin_dashboard.html 模板。
# accounts/views.py
from django.contrib.auth.decorators import login_required
@login_required
def user_dashboard(request):
return render(request, 'accounts/user_dashboard.html')
@login_required
def admin_dashboard(request):
return render(request, 'accounts/admin_dashboard.html')
创建登录模板: 在"accounts/templates/accounts/login.html"模板中,我们创建一个简单的登录表单,用于输入用户名和密码。
<!-- accounts/templates/accounts/login.html -->
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<h1>Login</h1>
{% if error_message %}
<p>{{ error_message }}</p>
{% endif %}
<form method="post">
{% csrf_token %}
<label for="username">Username:</label>
<input type="text" id="username" name="username"><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password"><br>
<input type="submit" value="Login">
</form>
</body>
</html>
创建仪表盘模板: 在"accounts/templates/accounts/user_dashboard.html"模板中,我们创建一个普通用户的仪表盘页面。
<!-- accounts/templates/accounts/user_dashboard.html -->
<!DOCTYPE html>
<html>
<head>
<title>User Dashboard</title>
</head>
<body>
<h1>Welcome, {{ request.user.username }} (User)</h1>
<!-- 普通用户仪表盘内容 -->
</body>
</html>
在"accounts/templates/accounts/admin_dashboard.html"模板中,我们创建一个管理员用户的仪表盘页面。
<!-- accounts/templates/accounts/admin_dashboard.html -->
<!DOCTYPE html>
<html>
<head>
<title>Admin Dashboard</title>
</head>
<body>
<h1>Welcome, {{ request.user.username }} (Admin)</h1>
<!-- 管理员用户仪表盘内容 -->
</body>
</html>
以上示例代码展示了如何在 Django 中实现选择角色的登录功能。用户登录后,会根据用户的角色(普通用户或管理员用户)将其重定向到不同的仪表盘页面。登录功能中,我们通过自定义的用户模型添加了 is_admin 字段来区分用户角色。