使用DjangoRESTFramework中的TokenAuthentication()实现PythonAPI身份验证
在Django中使用Django REST Framework的TokenAuthentication()来实现API身份验证非常简单。TokenAuthentication()类是Django REST Framework内置的身份验证类之一,它依赖于认证令牌(token)来鉴别用户。
首先,确保您已经安装了Django和Django REST Framework。可以使用以下命令安装它们:
pip install Django pip install djangorestframework
接下来,我们需要在Django的设置文件(settings.py)中进行一些配置。将以下行添加到INSTALLED_APPS列表中:
INSTALLED_APPS = [
...
'rest_framework',
]
然后,在settings.py的末尾添加以下行:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
上述配置中,我们将TokenAuthentication设置为默认的身份验证类,并将IsAuthenticated设置为默认的权限类。这意味着在访问我们的API时,用户必须提供有效的令牌,并且必须经过身份验证才能访问受保护的API视图。
接下来,我们需要为用户生成一个令牌。首先,在models.py中创建一个自定义用户模型(如果您已经有了自定义用户模型,请跳过此步骤)。例如,我们创建了一个名为CustomUser的自定义用户模型:
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
# 添加额外的字段(如果有)
pass
然后,运行以下命令创建数据库迁移:
python manage.py makemigrations python manage.py migrate
接下来,我们需要在用户模型中添加Token。打开models.py文件并将以下内容添加到CustomUser模型类中:
from django.contrib.auth.models import AbstractUser
from django.db import models
from rest_framework.authtoken.models import Token
class CustomUser(AbstractUser):
# 添加额外字段(如果有)
def save(self, *args, **kwargs):
created = False
if not self.pk:
created = True
super().save(*args, **kwargs)
if created:
Token.objects.create(user=self)
上述代码中,我们在自定义用户模型的save()方法中创建了一个Token,并将其与用户相关联。
现在,我们已经准备好在视图中使用TokenAuthentication进行身份验证。创建一个名为views.py的文件,并添加以下内容:
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
class ExampleView(APIView):
authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request, format=None):
content = {
'user': str(request.user),
'auth': str(request.auth),
}
return Response(content)
在上面的代码中,我们定义了一个名为ExampleView的API视图。我们指定了TokenAuthentication作为身份验证类,并且设置了IsAuthenticated为权限类。这意味着只有经过身份验证的用户才能访问此视图。
在视图中,我们通过request.user获取当前用户对象,并使用request.auth获取用户的Token。
最后,我们需要定义一个URL模式来映射到我们的视图。打开urls.py文件并添加以下内容:
from django.urls import path
from .views import ExampleView
urlpatterns = [
path('example/', ExampleView.as_view(), name='example'),
]
在上面的代码中,我们将ExampleView视图映射到/example/ URL上。
这就是全部了!现在,当用户访问/example/ URL时,他们需要在请求的Authorization标头中提供有效的令牌。如果令牌无效或缺失,用户将收到401错误响应。
希望这个例子能帮助您理解如何使用Django REST Framework中的TokenAuthentication进行API身份验证。
