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

下面是关于“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 的绘图库 Matplotlib 来创建各种类型的图形。我们将从基础开始,逐步深入。 Matplotlib 是一个极其强大、灵活的绘图库,它不仅可以创建线图、柱状图和散点图等常规类型的图形,还能够应对更加复杂的需求,如 3D 图形、色彩填充…

    python 2023年5月19日
    00
  • Python常用模块用法分析

    Python常用模块用法分析 Python作为一门高级编程语言,有很多强大的功能和特性。其中,模块是Python中最重要的概念之一。Python模块是一组相关的函数、类和变量的集合,用于建立一个特定的应用程序。Python有大量标准模块和第三方模块可供使用,下面将为您详细介绍一些常用模块的用途和用法。 os模块 os模块提供了一些与操作系统交互的函数,可以实…

    python 2023年5月14日
    00
  • Python 文件读写操作实例详解

    首先,我们来介绍一下Python文件读写操作中常用的函数: open(file, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None):打开一个文件并返回文件对象。其中参数file表示文件名(包含路径),mode表示打开文件的模…

    python 2023年5月19日
    00
  • 使用python实现链表操作

    链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。链表可以用来实现栈、队列等数据结构。下面是使用Python实现链表操作的详解: 定义节点类 链表中的每个节点都包含一个数据元素和一个指向下一个节点的指针。因此,我们可以定义一个节点类来表示链表中的节点。 class Node: def __init__(self…

    python 2023年5月13日
    00
  • 浅谈Django前端后端值传递问题

    浅谈Django前后端值传递问题 前言 Django是一个高效的、高度可定制的开源Web框架,它的MVC设计模式被广泛应用于Web开发中。在初学Django的过程中,前后端值的传递会成为必须掌握的基础知识。在本文中,我们将详细讨论Django中前后端值的传递问题。 GET与POST方法 在Django中,与前后端值的传递密切相关的是HTTP请求中的GET方法…

    python 2023年6月3日
    00
  • Python pandas对excel的操作实现示例

    下面为您讲解”Python Pandas 对 Excel的操作实现示例” 的完整实例教程。 介绍 Pandas是一个基于NumPy的Python开源数据分析工具,可以方便地对数据进行读取、处理、清洗、统计、分析等操作。而Excel作为数据处理中经典的办公软件,也是数据表格的代表,通常用户会使用Excel来处理和分析数据。在工作中,当需要大量处理Excel表格…

    python 2023年5月13日
    00
  • 基于Pandas读取csv文件Error的总结

    针对“基于Pandas读取csv文件Error”的总结,我会按照以下内容进行详细讲解: 背景介绍 基于Pandas读取csv文件的错误总结 示例说明1 示例说明2 总结 接下来,我将按照这个结构逐一进行介绍和解释。 1. 背景介绍 Pandas是一个流行的Python数据分析库。通过Pandas,我们可以载入各种数据集,并且完成数据分析和处理。其中,读取CS…

    python 2023年5月13日
    00
  • django-celery-beat搭建定时任务的实现

    下面我将详细讲解如何使用Django与Celery Beat搭建定时任务的实现。 这里简单介绍一下Django和Celery Django Django是一个由Python编写的免费、开源的Web框架。它遵循了MVC设计模式,且拥有灵活的URL路由和完善的后台管理,使得Django能够非常方便地开发高质量的Web应用程序。 Celery Celery是一个由…

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