欢迎访问宙启技术站
智能推送

RESTFramework中Token身份验证的Python实例

发布时间:2023-12-24 13:14:01

在RESTful API的开发中,身份验证是一个非常重要的功能。Django REST Framework(DRF)是一个流行的Python框架,提供了一种使用Token进行身份验证的机制。Token身份验证机制通过生成一个Token令牌,并将其与用户关联,来验证用户的身份。

下面是一个使用DRF进行Token身份验证的Python示例。首先,需要安装Django和Django REST Framework:

pip install django
pip install djangorestframework

接下来,创建一个新的Django项目:

django-admin startproject token_auth_demo
cd token_auth_demo

然后,创建一个新的Django应用程序:

python manage.py startapp auth_api

settings.py文件中,将DRF添加到已安装应用程序列表:

INSTALLED_APPS = [
    ...
    'rest_framework',
    'auth_api',
]

接下来,创建一个新的模型来存储用户:

# auth_api/models.py
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass

然后,创建一个新的序列化器用于序列化用户数据:

# auth_api/serializers.py
from rest_framework import serializers
from .models import User

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id', 'username', 'email']

接下来,创建一个API视图用于创建和查看用户:

# auth_api/views.py
from rest_framework import generics
from rest_framework.authtoken.models import Token
from .models import User
from .serializers import UserSerializer

class UserCreateView(generics.CreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

class UserListView(generics.ListAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

class UserDetailView(generics.RetrieveAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

然后,配置URL路由以映射到视图:

# token_auth_demo/urls.py
from django.urls import path, include
from auth_api.views import UserCreateView, UserListView, UserDetailView
from rest_framework.authtoken.views import obtain_auth_token

urlpatterns = [
    path('api/v1/', include([
        path('users/', UserCreateView.as_view(), name='user-create'),
        path('users/all/', UserListView.as_view(), name='user-list'),
        path('users/detail/<int:pk>/', UserDetailView.as_view(), name='user-detail'),
        path('token-auth/', obtain_auth_token, name='token-auth'),
    ])),
]

最后,运行Django开发服务器并进行测试:

python manage.py runserver

现在,可以使用POST请求来创建新的用户,以及使用GET请求来查看所有用户和单个用户的详细信息。例如,在终端中使用cURL进行测试:

首先,创建一个新用户:

curl -X POST -d "username=testuser&password=testpassword&email=testuser@example.com" http://localhost:8000/api/v1/users/

然后,使用Token进行身份验证,并获取Token令牌:

curl -X POST -d "username=testuser&password=testpassword" http://localhost:8000/api/v1/token-auth/

最后,使用Token令牌来获取用户列表和用户详细信息:

curl -H "Authorization: Token your_token" http://localhost:8000/api/v1/users/all/
curl -H "Authorization: Token your_token" http://localhost:8000/api/v1/users/detail/1/

以上是使用DRF进行Token身份验证的Python示例。通过这种机制,可以更安全地保护API端点,并确保只有授权用户才能访问受保护的资源。