PythonWeb开发框架—Django之DRF框架的使用详解

1.安装依赖包

pip install djangorestframework

2.配置应用

在settings.py中的INSTALLED_APPS中添加rest_framework应用

3.创建序列化器

序列化器是用来操作models的

  • 第一步:定义models
##models.pyfrom django.db import models# Create your models here.class User(models.Model):name = models.CharField(verbose_name='用户名', max_length=32)password = models.CharField(verbose_name='登录密码', max_length=64)userid = models.CharField(verbose_name='用户ID', max_length=64)phonenumber=models.CharField(verbose_name='手机号',max_length=11)class Meta:db_table = 'user'
  • 第二步:在业务模块文件夹下先新增serializers.py文件

  • 第三步:在serializers.py中创建序列化器
from rest_framework import serializers
from testmodule.models import User##系列化器是用来操作models的
class UserSerializer(serializers.ModelSerializer):class Meta:model = User  fields = '__all__' #操作user表时返回所有字段# fields = ('id', 'name') #操作user表时只返回name字段

4 序列化操作

  • 在views.py中定义视图类
#views.pyfrom testmodule.models import User
from rest_framework.viewsets import ModelViewSet
from testmodule.serializers import UserSerializerclass UserDRFView(ModelViewSet):##下面两行代码已经自动定义了GET、POST、PUT、PATCH和DELETE方法queryset = User.objects.all()serializer_class = UserSerializer
  • 设置接口调用路径
from rest_framework.routers import DefaultRouter
from django.urls import includerouter = DefaultRouter()
router.register('user', testmodule.views.UserDRFView,basename="user")urlpatterns = [path('', include(router.urls))]
  • 调用接口测试

get方法:序列化操作

和数据库表里数据一致

增加主键查询:

POST方法:反序列化操作

post的数据已经新增到数据库

5.数据校验

5.1 数据长度校验

在序列化器里对字段的长度进行校验:

用postman测试校验规则是否生效:

5.2 重复校验

在序列化器里对数据进行是否重复校验

需要导入UniqueValidator类:from rest_framework.validators import UniqueValidator

用postman测试校验规则是否生效

5.3 自定义校验规则

  • 单字段校验

需要用到ValidationError

先导入:from rest_framework.exceptions import ValidationError

校验方法命名规则:validate_校验字段名

用postman测试校验规则是否生效:

  • 多字段校验

需要用到ValidationError

校验方法命名固定为:validate

用postman测试校验规则是否生效:

6.多条件查询

  • 全局配置的写法

第一步:先安装pip install django-filter

第二步:在setting.py中的INSTALLED_APPS中配置应用:

第三步:在setting.py中添加

REST_FRAMEWORK = {'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}

第四步:在views.py的视图类中添加要过滤的多条件

测试:

  • 局部配置的写法

第一步:在views.py中导入:from django_filters.rest_framework import DjangoFilterBackend

第二步:在视图类中添加:

filter_backends = [DjangoFilterBackend]

filterset_fields = ('name', 'phonenumber')

测试:

7.模糊搜索

第一步:导入from rest_framework import filters

第二步:在views.py的视图类中添加模糊过滤条件

测试:查询参数的字段是:search

如果需要多字段都支持模糊查询,在视图类的search_fields = ('name',)中增加字段即可

8.排序

第一步:导入from rest_framework import filters

第二步:在views.py的视图类中添加filters.OrderingFilter和排序字段

测试:查询参数的字段是:ordering

9.分页支持

在settings.py中添加:

'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination','PAGE_SIZE': 2

测试:

10.权限token支持

  • 安装

pip install djangorestframework_simplejwt

  • 在settings.py 中REST_FRAMEWORK添加
'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework_simplejwt.authentication.JWTAuthentication' ]                                    

  • 在urls.py 中添加
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView, TokenVerifyViewurlpatterns = [path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), # rest_framework_simplejwt自带的得到tokenpath('api/v1/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), # 刷新JWTpath('api/token/verify/',TokenVerifyView.as_view(), name='token_verify')  # 验证token]
  • 测试:不传token时访问报错

  • 获取token

获取token需要管理员账号密码,就是访问http://localhost:8000/admin/ 的账号和密码

如果没有就先创建一个:执行命令 python manage.py createsuperuser

然后访问:http://localhost:8000/api/token/

填写管理员账号和密码:

点击【POST】获取到access

组装Token:Bearer+空格+access

请求头加上Authorization再次测试:

11.DRF认证方式

'DEFAULT_AUTHENTICATION_CLASSES': [ 
'rest_framework_simplejwt.authentication.JWTAuthentication', 
'rest_framework.authentication.SessionAuthentication', 
'rest_framework.authentication.BasicAuthentication' ]

DEFAULT_AUTHENTICATION_CLASSES  这是认证类列表,用于定义用户身份的验证方式。Django REST 框架会按列表顺序尝试这些认证方式,直到有一个成功验证用户身份

  • JWTAuthentication  token认证,适用于无状态 API
  • SessionAuthentication   Session 认证需要检查 Cookie 或请求头中的 Session,使用时需要启用 Django 的 Session 中间件,且会触发 CSRF 校验
  • BasicAuthentication  基本认证:用户名和密码 Base64 编码后放在请求头 Authorization: Basic credentials

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23423.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬件加速与技术创新双轮驱动:DeepSeek和ChatGPT性能进阶的未来蓝图

🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 ​ Linux网络编程笔记: https://blog.cs…

让子弹飞的DeepSeek火锅诗和《软件方法》

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 我在知乎上面看到了这样的一个问题:DeepSeek写出过哪些惊艳的诗词? 有一位答主讲了他以《让子弹飞》作为素材让DeepSeek写诗的故事:要有风&#xf…

输入搜索、分组展示选项、下拉选取,el-select 实现:即输入关键字检索,返回分组选项,选取跳转到相应内容页 —— VUE 项目-全局模糊检索

后端数据代码写于下一篇:输入搜索、分组展示选项、下拉选取,全局跳转页,el-select 实现 —— 后端数据处理代码,抛砖引玉展思路 【效果图】:分组展示选项 >【提供界面操作体验】 【录制效果视频展示】&#xff1a…

【Linux】初识进程概念与 fork 函数的应用

Linux相关知识点可以通过点击以下链接进行学习一起加油!初识指令指令进阶权限管理yum包管理与vim编辑器GCC/G编译器make与Makefile自动化构建GDB调试器与Git版本控制工具Linux下进度条冯诺依曼体系与计算机系统架构 进程是操作系统中资源分配和调度的核心单位&#…

【linux】自主shell编写

🔥个人主页:Quitecoder 🔥专栏:linux笔记仓 目录 01.输出命令行02.获取用户命令字符串03.命令行字符串分割04.执行命令05.细节修改检查是否为内建命令 完整代码: 01.输出命令行 完成对一个shell 的编写,首…

小程序高度问题背景scss

不同的机型&#xff0c;他的比例啥的都会不一样&#xff0c;同样的rpx也会有不同的效果。所以这里选择了取消高度。 <view class"box-border" :style"{padding-top: ${navHeight}px,}"><!-- 已登录 --><view v-if"userStore.userInfo&…

DeepSeek 15天指导手册——从入门到精通 PDF(附下载)

DeepSeek使用教程系列--DeepSeek 15天指导手册——从入门到精通pdf下载&#xff1a; https://pan.baidu.com/s/1PrIo0Xo0h5s6Plcc_smS8w?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/2e8de75027d3 《DeepSeek 15天指导手册——从入门到精通》以系统化学习路径为核心&…

element-ui的组件使用

1. 安装 Element UI&#xff08;在文件夹最上面输入cmd进入dos窗口&#xff0c;然后输入安装指令 npm install element-ui --save&#xff09; 2.在main.js文件全局引入(main.js文件负责 全局注册 )&#xff0c;在该文件注册的所有组件在其他文件都能直接调用&#xff0c;一般…

List的模拟实现(2)

前言 上一节我们讲解了list的基本功能&#xff0c;那么本节我们就结合底层代码来分析list是怎么实现的&#xff0c;那么废话不多说&#xff0c;我们正式进入今天的学习&#xff1a;&#xff09; List的底层结构 我们先来看一下list的底层基本结构&#xff1a; 这里比较奇怪的…

RT-Thread+STM32L475VET6实现红外遥控实验

文章目录 前言一、板载资源介绍二、具体步骤1. 确定红外接收头引脚编号2. 下载infrared软件包3. 配置infrared软件包4. 打开STM32CubeMX进行相关配置4.1 使用外部高速时钟&#xff0c;并修改时钟树4.2 打开定时器16(定时器根据自己需求调整)4.3 打开串口4.4 生成工程 5. 打开HW…

速通HTML

HTML基础 1.快捷键 基于VS Code记录编写过程中常用的快捷键 功能快捷键生成HTML基本骨架!回车保存代码CtrlS在浏览器运行代码AltB注释Ctrl/缩进Tab取消缩进ShiftTab收起侧边栏CtrlB 先保存&#xff0c;再在浏览器运行才能刷新 2.标签 标签作用h1——h6双标签标题标签&#…

WebXR教学 01 基础介绍

什么是WebXR&#xff1f; 定义 XR VR AR Web上使用XR技术的API WebXR 是一组用于在 Web 浏览器中实现虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;应用的技术标准。它由 W3C 的 Immersive Web 工作组开发&#xff0c;旨在提供跨设备的沉浸式体验…

IRI 2016 模型在线版 MATLAB

IRI官网&#xff1a;International Reference Ionosphere IRI-2016在线计算&#xff1a;IRI 2016 | CCMC 官方提供的MATLAB代码需要联网读取IRI网页数据&#xff1a; 下载需要注册账号&#xff0c;没有注册账号的自行注册&#xff0c;下载好后解压是这样的&#xff1a; 下载I…

数据结构系列一:初识集合框架+复杂度

前言 数据结构——是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是计算机专业的基础课程&#xff0c;但也是一门不太容易学好的课&#xff0c;它当中有很多费脑子的东西&#xff0c;之后在学习时&#xff0c;你若碰到了困惑或不解的地方 都是很正常的反应&…

智慧物业平台(springboot小程序论文源码调试讲解)

第4章 系统设计 用户对着浏览器操作&#xff0c;肯定会出现某些不可预料的问题&#xff0c;但是不代表着系统对于用户在浏览器上的操作不进行处理&#xff0c;所以说&#xff0c;要提前考虑可能会出现的问题。 4.1 系统设计思想 系统设计&#xff0c;肯定要把设计的思想进行统…

2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序

2024年国赛高教杯数学建模 A题 板凳龙闹元宵 原题再现 “板凳龙”&#xff0c;又称“盘龙”&#xff0c;是浙闽地区的传统地方民俗文化活动。人们将少则几十条&#xff0c;多则上百条的板凳首尾相连&#xff0c;形成蜿蜒曲折的板凳龙。盘龙时&#xff0c;龙头在前领头&#x…

在PyCharm中集成AI编程助手并嵌入本地部署的DeepSeek-R1模型:打造智能开发新体验

打造智能开发新体验&#xff1a;DeepSeekPycharmollamaCodeGPT 目录 打造智能开发新体验&#xff1a;DeepSeekPycharmollamaCodeGPT前言一、什么是ollama&#xff1f;二、如何使用1.进入ollama官方网站:2.点击下载ollama安装包3.根据默认选项进行安装4.安装成功5.打开命令提示符…

软件测试的基础入门(一)

文章目录 一、什么是软件测试&#xff1f;&#xff08;1&#xff09;生活中的测试案例&#xff08;2&#xff09;代码中的测试示例&#xff08;3&#xff09;软件测试的定义 二、软件测试的重要性三、测试工程师&#xff08;1&#xff09;定义&#xff08;2&#xff09;分类&am…

Linux版本控制器Git【Ubuntu系统】

文章目录 **前言**一、版本控制器二、Git 简史三、安装 Git四、 在 Gitee/Github 创建项目五、三板斧1、git add 命令2、git commit 命令3、git push 命令 六、其他1、git pull 命令2、git log 命令3、git reflog 命令4、git stash 命令 七、.ignore 文件1、为什么使用 .gitign…

20250221 NLP

1.向量和嵌入 https://zhuanlan.zhihu.com/p/634237861 encoder的输入就是向量&#xff0c;提前嵌入为向量 二.多模态文本嵌入向量过程 1.文本预处理 文本tokenizer之前需要预处理吗&#xff1f; 是的&#xff0c;文本tokenizer之前通常需要对文本进行预处理。预处理步骤可…