下面是关于“Django rest framework工具包简单用法示例”的完整攻略:
什么是Django rest framework
Django rest framework 是一个用于构建 Web APIs 的强大工具包。它使得构建 Web API 变得简单、快捷而且幸福,因此备受 Django 开发者的喜爱。
Django rest framework 提供了一系列可用于处理序列化(data serialization)、请求和响应、验证和认证以及其他常见工作的组件。这些组件构成了一种强大的方式,使开发人员能够轻松地编写出安全、灵活和可扩展的 API。
安装和配置
Django rest framework 的安装相对简单,只需要在终端中输入以下命令:
pip install djangorestframework
将其添加到 Django 项目中的settings.py
文件中:
INSTALLED_APPS = [
'rest_framework',
#其他app
]
序列化和请求
模型定义
首先,我们需要定义一个模型以供序列化。这个模型是一个非常简单的身份验证模型,它包含了用户的名称、邮件地址和密码。
from django.db import models
import uuid
class User(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=200)
email = models.EmailField()
password = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
序列化
下一步是定义一个序列化器来序列化我们的模型,使其能够在 API 中发送和接收。
from rest_framework import serializers
from .models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'name', 'email', 'password')
该序列化器负责将 Python 对象转换为 JSON。我们将 User
模型和我们想在 API 中提供的字段传递给 serializers.ModelSerializer
类,然后使用 fields
属性指定要序列化的字段。
视图
现在我们需要定义一个视图来处理请求和响应。 接下来,我们将实现用户的创建和列表。这看起来是这样的。
from rest_framework import generics
class UserCreateView(generics.CreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
class UserListView(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
这里,我们使用一个内置的 DRF 类,减少了大量的开发时间。视图集合的GET请求可以轻松获得我们的用户列表,POST请求可以快速创建用户。
认证和权限
Django rest framework可以让我们轻松地实现各种各样的验证和请求权限协议。 下面,我们来看下JWT。
集成JWT身份验证
JSON Web Token 是一个轻量级的 Web 身份验证标准。使用 JWT 的原因是,当客户端进行身份验证并获取到 JWT 后,它就将其存储在客户端上,这意味着客户端不必在每个 HTTP 请求中都传递凭据,因为 JWT 包含了所有必要的信息。
安装DRF Simple JWT
:
pip install djangorestframework-simplejwt
将其添加到 Django 项目中的settings.py
文件中:
INSTALLED_APPS = [
'rest_framework',
'rest_framework.authtoken',
'rest_framework_simplejwt',
#其他app
]
我们需要向JWT添加一个过期时间来使其更加安全。
from datetime import timedelta
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
}
现在我们在项目的根目录下创建一个文件 serializers.py
:
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework import serializers
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
@classmethod
def get_token(cls, user):
token = super().get_token(user)
# Add custom claims
token['name'] = user.name
# ...
return token
class TokenSerializer(serializers.Serializer):
"""Serialize refresh and access tokens"""
access = serializers.CharField()
refresh = serializers.CharField()
最后,修改 endpoints.py 文件:
from rest_framework_simplejwt.views import TokenRefreshView
from .serializers import MyTokenObtainPairSerializer
class MyTokenRefreshView(TokenRefreshView):
serializer_class = TokenSerializer
class MyTokenObtainView(TokenObtainPairView):
serializer_class = MyTokenObtainPairSerializer
renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES
至此,我们已经完成了集成JWT身份验证。我们可以轻松地通过以下方式生成令牌:
POST
请求/api/token/
,带上用户名和密码,返回jwt。
POST
请求 /api/token/refresh/
,带上刚刚生成的token,返回新的token。
结束
以上就是本次 “Django Rest Framework 工具包简单用法示例”的完整攻略。进行了讲述Django rest framework的安装、序列化、请求、认证和权限等方面的内容,并通过JWT示例进一步加深了您的理解。
示例之一用户列表:
GET /list/
示例之二用户创建:
POST /create/
Content-Type: application/json
{"name": "test", "email": "test@example.com", "password": "123456"}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django rest framework工具包简单用法示例 - Python技术站