Django rest framework工具包简单用法示例

yizhihongxing

下面是关于“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技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python变量格式化输出实现原理解析

    Python变量格式化输出是指根据格式化字符串的要求,将变量的值进行格式化输出。格式化输出是Python进行输出的常用方式之一,它方便了我们的输出和展示数据。 格式化字符串 格式化字符串是由格式化代码和普通字符组成的字符串。格式化代码以百分号(%)开头,然后紧跟着转换说明符。例如,以下为格式化字符串的标准格式: format_specifier % (var…

    python 2023年6月5日
    00
  • 基于Python制作一个文本翻译器

    如果要基于Python制作一个文本翻译器,我们可以使用Python的机器翻译库——Googletrans和BaiduTranslate,这两个库可以实现文本的自动翻译。 以下是制作文本翻译器的完整攻略: 步骤1:安装机器翻译库 我们需要下载和安装Python的机器翻译库——Googletrans和BaiduTranslate。其中,Googletrans可以…

    python 2023年5月18日
    00
  • Python 常用的安装Module方式汇总

    下面我来详细讲解一下“Python常用的安装Module方式汇总”,包括以下方面: Python模块的安装方式汇总 pip命令的使用 conda命令的使用 1. Python模块的安装方式汇总 目前,Python模块的安装方式比较多,主要有以下几种: 使用pip安装 使用conda安装 直接下载源码安装 通过Python的包管理器安装 其中,前两种是比较常用…

    python 2023年5月14日
    00
  • Python类方法总结讲解

    Python类方法总结讲解 在Python中,类方法是一种特殊的方法,它与类本身相关联,而不是与类的实例相关联。在本文中,我们将深入探讨Python类方法的概念、用法和示例。 类方法的定义 类方法使用@classmethod装饰器定义的方法。它的第一个参数通常被命名为cls,它指向类本身,而不是类的实例。类方法可以通过类名或类的实例来调用。 以下是一个示例代…

    python 2023年5月13日
    00
  • pandas-resample按时间聚合实例

    【pandas-resample按时间聚合实例】 1. pandas resample概述 pandas的resample方法是基于时间序列数据(positional or index based timeseries data)进行重采样的一种方法。通过resample方法,我们可以将时间序列数据从一个频率转换成另一个频率,如将数据从分钟级别转换为小时级别…

    python 2023年6月2日
    00
  • Python函数中的不定长参数相关知识总结

    下面是关于“Python函数中的不定长参数相关知识总结”的完整攻略: 1.什么是不定长参数 在Python中,有时候函数的参数个数是不确定的,这就需要我们使用不定长参数。不定长参数包括两种:可变参数和关键字参数。 可变参数是指传入的参数个数是不确定的,可变参数在函数内部自动组装为元组(tuple)类型。 关键字参数是指传入的参数个数也是不确定的,但是和普通参…

    python 2023年5月13日
    00
  • Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解

    这篇攻略将详细讲解Python协程操作之gevent的用法,包括yield阻塞和greenlet等技术。通过gevent可以实现协程的多任务操作,以及有规律的交替协作执行。下面将从以下几个方面进行介绍: 什么是协程 Python中的协程 gevent的安装和使用 yield阻塞和greenlet技术 协程实现多任务操作的示例 什么是协程 协程是一种用户态的轻…

    python 2023年5月19日
    00
  • python_mask_array的用法

    Python中mask_array的用法 mask_array是numpy中的一个函数,可以用来创建布尔掩码数组,其中每个元素都会被随机地选择是否被屏蔽(即赋值为False),从而创建一个与原始数组相同形状的数组,其中部分值被屏蔽。 这个函数的主要参数是输入的数组和被屏蔽的比例,默认情况下,比例为50%。例如: import numpy as np arr …

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部