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爬虫爬取吉首大学教务系统中的成绩单。我们将使用requests库和BeautifulSoup库获取成绩单数据,并使用pandas库将数据保存到CSV文件中。我们将提供两个示例代码,分别用于获取单个学期和多个学期的成绩单数据。 安装所需库 在开始前,我们需要安装requests、BeautifulSoup和pandas库。我们可…

    python 2023年5月15日
    00
  • 跟老齐学Python之通过Python连接数据库

    下面是详细讲解“跟老齐学Python之通过Python连接数据库”的完整攻略,攻略包含以下几个步骤: 1. 安装数据库驱动 在使用Python连接数据库之前,需要先安装相应数据库的驱动。以MySQL为例,我们可以使用PyMySQL包作为MySQL的驱动。安装PyMySQL包可以使用pip命令进行安装,在命令行中输入以下命令: pip install pymy…

    python 2023年5月31日
    00
  • python中的文件打开与关闭操作命令介绍

    下面为你详细讲解“Python中的文件打开与关闭操作命令介绍”。 文件打开操作 Python中打开文件的命令是open(),其语法如下: file = open(file_path, mode) 其中,参数file_path为文件路径,可以是相对路径或绝对路径,参数mode为打开文件的模式,常见的模式有: ‘r’:读取模式,打开文件后只能读取文件内容,不能写…

    python 2023年5月20日
    00
  • python逐行读取文件内容的三种方法

    当我们需要处理大型文件时,可能会需要逐行读取文件的内容。Python为我们提供了多种读取文件的方式,以下是Python逐行读取文件内容的三种方法: 1. 使用for循环逐行读取文件内容 with open(‘file.txt’, ‘r’) as f: for line in f: print(line.strip()) 这种方法会一次读取一行,每次循环会返回…

    python 2023年6月5日
    00
  • Python简明入门教程

    《Python简明入门教程》是一篇针对初学者的Python入门教程,主要介绍了Python的基本语法、数据类型、函数、模块等内容。下面是一个详细的攻略。 Part 1:安装Python环境和编辑器 首先需要在Python官网下载并安装Python的最新版本。 推荐使用VSCode、PyCharm等编辑器来编写Python代码,这些编辑器都支持Python的语…

    python 2023年5月13日
    00
  • python os模块介绍

    Python os模块介绍 简介 在Python中,os模块是用于与操作系统进行交互的模块,它提供了很多与操作系统相关的功能。 常用功能 获取当前工作目录 使用os模块中的getcwd()函数可以获取当前工作目录。 import os cwd = os.getcwd() print(cwd) 创建目录 使用os模块中的mkdir()函数可以创建目录。 imp…

    python 2023年5月30日
    00
  • Python的位置参数是什么?

    在 Python 中,位置参数是一种函数参数的类型,它们根据它们在函数定义中的位置来接收传递给函数的值。 位置参数是最常用的参数类型。当我们定义一个函数时,我们可以指定多个参数,其中一些是位置参数。位置参数的值是按照它们在函数调用中出现的顺序来传递的。例如,下面是一个带有两个位置参数的函数: def add_numbers(a, b): return a +…

    2023年2月20日
    00
  • 获取与请求不一致的频道 ID(python)

    【问题标题】:Get Channel Id discord with request (python)获取与请求不一致的频道 ID(python) 【发布时间】:2023-04-06 14:58:01 【问题描述】: def send_dm(): token = ‘i know, just not putting my token here’ message…

    Python开发 2023年4月7日
    00
合作推广
合作推广
分享本页
返回顶部