下面是Django的用户模块与权限系统的示例代码的完整攻略。
一、用户模块示例代码
用户模块是Django中的一个常用组件,它可以轻松实现用户的注册、登录、密码找回等功能。下面是一个简单的用户模块示例代码:
1. 创建用户模型
首先,在项目的models.py文件中创建一个用户模型:
from django.db import models
from django.contrib.auth.models import AbstractUser
# 创建用户模型
class User(AbstractUser):
phone = models.CharField(max_length=11, blank=True, null=True, verbose_name="手机号码")
email = models.EmailField(unique=True, verbose_name="邮箱地址")
class Meta:
verbose_name = "用户信息"
verbose_name_plural = verbose_name
def __str__(self):
return self.username
这里我们使用了Django自带的AbstractUser作为用户模型的基类,然后扩展了一些新的字段,比如手机号和邮箱地址。这个模型还重写了__str__方法,返回的是用户名。
2. 配置用户模块
在项目的settings.py文件中配置用户模块:
AUTH_USER_MODEL = 'app.User'
这里将用户模块的路径配置为“app.User”,其中“app”是你实际创建的应用名称。
3. 创建用户注册视图
接下来,在项目的views.py文件中创建用户注册视图:
from django.views.generic.edit import CreateView
from django.urls import reverse_lazy
from .models import User
# 创建用户注册视图
class UserCreateView(CreateView):
model = User
fields = ['username', 'email', 'password']
template_name = 'registration/signup.html'
success_url = reverse_lazy('login')
这里使用了Django自带的CreateView类来创建视图,同时指定了一些参数,比如模型、可编辑字段、模板名称和成功后的跳转链接。
4. 创建用户登录视图
再接下来,在项目的views.py文件中创建用户登录视图:
from django.views.generic import FormView
from django.urls import reverse_lazy
from django.contrib.auth.forms import AuthenticationForm
# 创建用户登录视图
class UserLoginView(FormView):
form_class = AuthenticationForm
template_name = 'registration/login.html'
success_url = reverse_lazy('index')
def form_valid(self, form):
login(self.request, form.get_user())
return super().form_valid(form)
这里使用了Django自带的FormView类来创建视图,指定了表单类、模板名称和成功后的跳转链接,同时还实现了form_valid方法来实现用户登录的逻辑。
5. 创建用户注销视图
最后,在项目的views.py文件中创建用户注销视图:
from django.contrib.auth.views import LogoutView
from django.urls import reverse_lazy
# 创建用户注销视图
class UserLogoutView(LogoutView):
template_name = 'registration/logged_out.html'
next_page = reverse_lazy('login')
这里使用了Django自带的LogoutView类来创建视图,指定了模板名称和成功后的跳转链接。
到这里,一个简单的用户模块就完成了。
二、权限系统示例代码
除了用户模块,Django还提供了强大的权限系统,可以轻松实现用户权限管理。下面是一个简单的权限系统示例代码:
1. 创建权限模型
首先,在项目的models.py文件中创建一个权限模型:
from django.db import models
# 创建权限模型
class Permission(models.Model):
name = models.CharField(max_length=50, verbose_name="权限名称")
code = models.CharField(max_length=50, unique=True, verbose_name="权限代码")
class Meta:
verbose_name = "权限信息"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
这里我们创建了一个简单的权限模型,包含了两个字段:权限名称和权限代码。
2. 创建角色模型
接下来,在项目的models.py文件中创建一个角色模型:
from django.db import models
from django.contrib.auth.models import Group
from .models import Permission
# 创建角色模型
class Role(Group):
permissions = models.ManyToManyField(Permission, blank=True)
class Meta:
verbose_name = "角色信息"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
这里我们使用了Django自带的Group作为角色模型的基类,然后扩展了一个新的字段:权限。这个新字段是一个ManyToManyField,关联了权限模型。
3. 创建权限认证
接下来,在项目的middleware.py文件中创建一个权限认证:
from django.contrib.auth.models import Permission
from django.core.exceptions import PermissionDenied
# 创建权限认证
class PermissionMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if not request.user.is_authenticated:
return self.get_response(request)
try:
path = request.path_info.lstrip('/')
obj = Permission.objects.get(codename=path)
except Permission.DoesNotExist:
return self.get_response(request)
if not request.user.has_perm(obj):
raise PermissionDenied
return self.get_response(request)
这里使用了Django自带的Permission类来判断当前登录的用户是否有权限访问当前请求的路径,如果没有权限,则抛出PermissionDenied异常。
4. 创建角色视图
最后,在项目的views.py文件中创建一个角色视图:
from django.views.generic import ListView
from .models import Role
# 创建角色视图
class RoleListView(ListView):
model = Role
template_name = 'role/list.html'
context_object_name = 'roles'
这里使用了Django自带的ListView类来展示所有的角色信息。
到这里,一个简单的权限系统就完成了。
以上是Django的用户模块与权限系统的示例代码完整攻略,并且包含了两条示例代码的说明。希望对使用Django开发Web应用的开发者们有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django的用户模块与权限系统的示例代码 - Python技术站