Django-自带的用户认证(auth)

1. 简介

Django是一种为快速开发安全Web应用程序而设计的高级Python Web框架。Django具有强大的内置认证系统,可让用户轻松地添加身份验证和授权功能到他们的应用程序中。基于这个需要,Django提供了自带的用户认证系统(auth)。

2. auth应用的工作原理

Django的认证系统(auth)依赖于用户(User)和组(Group)模型。用户(User)是认证系统的核心,每个User都有一个唯一的用户名、密码和电子邮件地址等信息。组(Group)是一种容器对象,用于管理用户的权限。一个用户可以隶属于多个组(Group)。

2.1 User模型

Django内置的User模型是完全功能的,它包含了许多实用的属性和方法。以下是User模型中一些常见的属性:

username: 用户名,max_length=150。

password: 密码,一般存储加密后的字符串。

email: 电子邮件地址。

first_name: 名字。

last_name: 姓氏。

is_active: 标记用户是否具有活动状态。

is_staff: 标记用户是否属于管理员组。

is_superuser: 标记用户是否拥有所有权限(包括管理员权限)。

date_joined: 用户创建的日期时间。

2.2 Group模型

Django内置的Group模型是用于管理权限的容器对象,它允许将一组用户进行分组。一个组可以拥有多个权限(permission)。以下是Group模型中一些常见的属性和方法:

name: 组名,max_length=150。

permissions: 与组关联的权限。

user_set: 与组关联的用户集合。

user_set.through: 通过此属性可以访问Group和User之间的关联模型。

3. 创建用户

在Django中,可以通过Django自带的管理后台或者使用Django提供的API来创建用户。

3.1 使用Django自带的管理后台

Django自带了一个强大的管理后台,可以通过在admin.py文件中注册模型来使用。在该管理后台中,可以轻松创建用户和组并分配用户的权限。

下面是通过管理后台创建用户的示例代码:

from django.contrib.auth.admin import UserAdmin

from django.contrib.auth.models import User

from django.contrib import admin

class CustomUserAdmin(UserAdmin):

# Custom Admin for User Model

model = User

list_display = ('id', 'username', 'email', 'is_staff', 'first_name', 'last_name', 'is_active')

admin.site.unregister(User)

admin.site.register(User, CustomUserAdmin)

3.2 使用Django提供的API

Django提供了API来创建用户和组。下面是一个创建用户的示例代码:

from django.contrib.auth.models import User

def create_user():

user = User.objects.create_user('john', 'lennon@thebeatles.com', 'password')

user.first_name = 'John'

user.last_name = 'Lennon'

user.is_staff = True

user.save()

4. 用户认证

用户认证是指验证用户身份和授权访问的过程。Django内置的认证系统提供了各种方法来验证用户的身份和授权访问。

4.1 登录认证

登录认证是通过验证用户名和密码来验证用户身份。在Django中,可以使用django.contrib.auth.authenticate()函数进行验证。该函数将返回用户对象,如果用户名和密码不匹配,该函数将返回None。以下是验证用户身份的示例代码:

from django.contrib.auth import authenticate, login

def user_login(request):

if request.method == 'POST':

username = request.POST['username']

password = request.POST['password']

user = authenticate(request, username=username, password=password)

if user is not None:

login(request, user)

return redirect('home')

else:

messages.error(request, 'Invalid username or password.')

return render(request, 'login.html')

4.2 权限认证

权限认证是指验证用户是否有访问某个资源的权限。在Django中,可以通过django.contrib.auth.decorators.permission_required装饰器来限制访问。该装饰器会检查用户是否具有访问资源的所需权限。如果用户没有权限,装饰器会返回一个带有错误消息的403禁止访问的响应。

注意:要使用权限认证,必须先在Django的后台中分配权限,然后才可以在代码中使用。

以下是权限认证的示例代码:

from django.contrib.auth.decorators import permission_required

@permission_required('myapp.can_view_my_view')

def my_view(request):

# 只有具有'can_view_my_view'权限的用户才能调用该函数

return HttpResponse("You can view this page.")

5. 总结

Django的内置认证系统(auth)是一种强大的工具,可以让开发者轻松地为自己的应用程序添加身份验证和授权功能。认证系统(auth)依赖于用户(User)和组(Group)模型,其中用户(User)是认证系统的核心。在Django中,可以使用自带的管理后台或者使用Django提供的API来创建用户和组。对于验证用户身份和授权访问,可以使用django.contrib.auth.authenticate()函数和django.contrib.auth.decorators.permission_required装饰器来实现。

后端开发标签