drf框架知识总览(代码片段)

godlover godlover     2023-04-18     247

关键词:

DRF框架知识总览

"""
1)接口(api):
    什么是接口
    接口文档
    接口规范
    
2)FBV => CBV:Function|Class Base View
    CBV的请求生命周期
    CBV比FBV的优势

3)drf框架的基础试图类
    APIView:请求模块、解析模块、渲染模块、响应模块、异常模块
    
4)drf核心组件
    序列化组件:将后台的任何数据,进行序列化返回给前台;将前台的数据反序列化成后台model对象再入库
    三大认证组件:认证组件、权限组件(RBAC)、频率组件
    视图家族:View一系列组件
    
5)群查接口相关组件:
    搜索、筛选、排序、分页
    
目的:
    必须掌握:六大基础接口 - 单查、群查、单增、单局部改、单整体改、单删
    一共十大接口 - 群增、群局部改、群整体改、群删
"""

接口

"""
接口概念:前台与后台进行信息交互的媒介 - url链接

接口组成:
    url链接 - 长得像返回数据的url链接
    请求方式 - get(查)、post(增)、put(整体改)、patch(局部改)、delete(删)
    请求参数 - 拼接参数、数据包参数(urlencoded、form-data、json)
    响应结果 - 响应的json数据
"""

开发阶段接口测试工具

"""
Postman:
    官网下载、傻瓜式安装
"""

接口文档

"""
1)为什么要写接口文档
    为什么要写接口:作为后台开发者,要将后台数据通过url链接反馈给前台
    为什么要写文档:作为后台开发者,一定知道改url链接应该采用什么请求方式、提交哪些数据、返回了哪些结果
就像后台要将url链接改前台一样,前台知道应该访问什么链接,所以前台也应该知道采用什么请求方式,以及提交什么数据。
    换而言之,接口文档是给 后台开发者、前台开发者、测试等各个项目相关项目组同时查看的,方便团队开发(规则是后台指定的,文档后台来写)
    
2)编写文档
    i)采用word编写
    ii)drf框架有插件,可以根据cbv的类快速生成文档
    iii)采用写文档的平台
    
3)书写过程
    i)先安装开发需要,完成接口的开发(设置后台url链接,设置请求方式、请求数据、响应结果)
    ii)选择一个接口平台,将后台url链接,设置请求方式、请求数据、响应结果信息变成成文档即可
"""

接口规范

"""
1)为什么要指定接口规范
    在前后台分离情况下,后台可以采用不同的后台运用,开发出类似的功能,所以前后台请求响应的规则是一致的;如果安装一套标准来编写接口,后台不管是什么语言,前台都可以采用一样的方式进行交互。反过来,后台也不需要管前台到底采用何种方式请求(页面、工具、代码)
    
2)通用的接口规范:Restful接口规范 - 规定了url如何编写;请求方式的含义;响应的数据规则
    i)url编写
        https协议 - 保证数据安全性
        api字眼 - 标识操作的是数据
        v1、v2字眼 - 数据的不同版本共存
        资源复数 - 请求的数据称之为资源
        拼接条件 - 过滤群查接口数据(https://api.baidu.com/books/?limit=3&ordering=-price)
        
    ii)请求方式
        /books/ - get - 群查
        /books/(pk)/ - get - 单查
        /books/ - post - 单增
        /books/(pk)/ - put - 单整体改
        /books/(pk)/ - patch - 单局部改
        /books/(pk)/ - delete - 单删
    
    iii)响应结果
        网络状态码与状态信息:2xx | 3xx | 4xx | 5xx
        数据状态码:前后台约定规则 - 0:成功 1:失败 2:成功无结果
        数据状态信息:自定义成功失败的信息解释(英文)
        数据本体:json数据
        数据子资源:头像、视频等,用资源的url链接
"""

CVB vs FBV

"""
1)路由绑定
urlpatterns = [
    # 1)项目启动,将test函数地址绑定给/test/路由
    # 2)请求/test/访问后台,后台就会调用绑定的test函数
    url(r'^test/$', views.test),
    
    # 1)项目启动,将as_view()函数执行结果返回的view函数地址绑定给/test/路由
    # 2)请求/test/访问后台,后台就会调用绑定的view函数
    # 3)view函数会将请求交给dispatch方法完成分发,分发(反射)给视图类的不同方法处理请求
    url(r'^test/$', views.Test.as_view()),
]

2)业务处理:
    fbv没一个接口都会对应一个函数来响应请求
    cbv可以将一个资源的增删改查所有操放在一个类中管理,在内部再分方法逐一处理 (高内聚低耦合:六个接口和一个类有关,但都能在类内部处理)

-------
三个View其实是同一个类
继承View的目的:
    i)继承as_view()方法,完成路由的配置
    ii)继承dispath()方法,完成请求分发
    注:如果自己写as_view()和dispath()方法,自定义视图类可以不用继承任何类的
from django.http import JsonResponse
from django.views import View
from django.views.generic import View
from django.views.generic.base import Viewclass Test(View):  
    def get(self, request, *args, **kwargs):
        return JsonResponse('cbv ok', safe=False)
"""

pip安装源

介绍

"""
1、采用国内源,加速下载模块的速度
2、常用pip源:
    -- 豆瓣:https://pypi.douban.com/simple
    -- 阿里:https://mirrors.aliyun.com/pypi/simple
3、加速安装的命令:
    -- >: pip install -i https://pypi.douban.com/simple 模块名
"""

永久配置安装源

Windows
"""
1、文件管理器文件路径地址栏敲:%APPDATA% 回车,快速进入 C:Users电脑用户AppDataRoaming 文件夹中
2、新建 pip 文件夹并在文件夹中新建 pip.ini 配置文件
3、新增 pip.ini 配置文件内容
"""
MacOS、Linux
"""
1、在用户根目录下 ~ 下创建 .pip 隐藏文件夹,如果已经有了可以跳过
    -- mkdir ~/.pip
2、进入 .pip 隐藏文件夹并创建 pip.conf 配置文件
    -- cd ~/.pip && touch pip.conf
3、启动 Finder(访达) 按 cmd+shift+g 来的进入,输入 ~/.pip 回车进入
4、新增 pip.conf 配置文件内容
"""
配置文件内容
"""
[global]
index-url = http://pypi.douban.com/simple
[install]
use-mirrors =true
mirrors =http://pypi.douban.com/simple/
trusted-host =pypi.douban.com
"""

DRF框架的安装

"""
1)安装
>: pip install djangorestframework

2)在settings中注册(为什么要注册,后期会讲)
INSTALLED_APPS = [
    # ...
    'rest_framework',
]

3)在settings中自定义drf配置
注:drf配置查找顺序,自定义settings的REST_FRAMEWORK配置字典 => drf默认settings的DEFAULTS
REST_FRAMEWORK = 

4)drf的封装特点:特点功能在特点模块下
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.request import Request
"""

图书资源准备

"""
1)在models.py创建Model类
from django.db import models
class Book(models.Model):
    name = models.CharField(max_length=64, verbose_name='书名')
    price = models.DecimalField(max_digits=5, decimal_places=2, verbose_name='价格')

    # 配置类
    class Meta:
        verbose_name_plural = '图书'

    def __str__(self):
        return self.name
        
2)在admin.py中注册Model类,方便在后台(admin)可视化管理数据
from django.contrib import admin
from . import models
admin.site.register(models.Book)  # admin要控制的model都需要注册一下

3)数据库迁移操作
>: python manage.py makemigrations
>: python manage.py migrate
>: python manage.py createsuperuser
    admin | Admin123
    
4)浏览器登录admin录入数据:http://localhost:8000/admin
"""

基于restful接口规范的接口设计

urlpatterns = [
    # 资源books接口的设计
    url(r'^books/$', views.BookAPIView.as_view()),  # 群查、单增
    url(r'^books/(?P<pk>d+)/$', views.BookAPIView.as_view()),  # 单查、单删、单(整体|局部)改
]

实现单查群查接口

from rest_framework.views import APIView
from rest_framework.response import Response
from . import models
class BookAPIView(APIView):
    def _multiple_get(self):
        # 不能返回,数据是QuerySet[Obj, Obj],也不能强制转换list
        # return list(models.Book.objects.all())

        # QuerySet[dict, dict]
        # print(models.Book.objects.values('name', 'price'))
        # QuerySet[tuple, tuple]
        # print(models.Book.objects.values_list('name', 'price'))

        return Response(list(models.Book.objects.values('name', 'price')))

    def _single_get(self, pk):
        # return Response(models.Book.objects.filter(pk=pk).values('name', 'price').first())

        # 开发阶段建议能用try的地方,不要使用if判断
        try:
            return Response(models.Book.objects.values('name', 'price').get(pk=pk))
        except:
            return Response('资源不存在')

    # 单查、群查
    def get(self, request, *args, **kwargs):
        pk = kwargs.get('pk')
        if pk:
            # 单查逻辑
            return self._single_get(pk)
        else:
            # 群查逻辑
            return self._multiple_get()

今日小结

drf框架

DRF框架知识总览CBVvsFBV 查看详情

drf学习(代码片段)

DRF框架知识总览'''1.什么是接口(api):什么是接口接口文档接口规范2.FBV=>CBV:Function|ClassBaseViewCBV的请求生命周期CBV比FBV的优势3.drf框架的基础视图类APIView:请求模块、解析模块、渲染模块、响应模块、异常模块4.drf... 查看详情

djangorestframework知识点总结(代码片段)

...ngoRESTframework(后续统称DRF)中一些常用功能的使用方法以及框架中的基础概念。希望这些内容能够帮忙大家更好的运用该框架去实现API服务。本文适合那些已经对Django框架、DRF以及RESTfulAPI设计风格有了解的相关人群。关于Django框... 查看详情

django&drf重点内容汇总(代码片段)

...不会全面的将所有内容进行讲解。大家可以在了解了Django框架和DRF框架之后再来看这边文章。否则会有点不知所云。1.Django1.1创建Django项目这一命令必须熟记于心:django-adminstartproject项目名1.2创建子应用1.在工 查看详情

drf框架之serializers序列化组件(代码片段)

...学了序列化工具json工具,就是吧信息存为类字典形式2.DRF框架自带序列化的工具:serializers 3.DRF框架serializers分为:第一种Serializer 第二种ModelSerializer 第一种用法之Serializerfromdjango.dbimportmodels#Createyourmod 查看详情

drf框架生成接口文档(代码片段)

一、简介生成API文档平台自动生成测试代码支持接口测试二、安装coreapi(必须)Pygments(可选)MarkDown(可选)pipinstall-ihttps://pypi.douban.com/simplecoreapipipinstall-ihttps://pypi.douban.com/simplePygmentspipinstall-ihttps://pypi.douban.com 查看详情

drf框架serializer之视图优化(代码片段)

一、create优化在serializer序列化中,我们通过创建序列化器对象的方式大大地简化了视图函数的代码,前端传入的数据通过反序列化操作进行了各种数据校验,代码如下:fromdjango.httpimportJsonResponsefromdjango.viewsimportViewfromdjango.dbimpor... 查看详情

drf框架之mixins(代码片段)

一、ListModelMixin提供list(request,*args,**kwargs)方法获取已存在的列表数据(获取多条记录)获取成功,则返回200OK1.引入方式fromrest_framework.mixinsimportListModelMixin2.源码对比我们可以发现,两处的代码基本一致,因此我们直接拿到使用来... 查看详情

drf框架认证组件(代码片段)

DRF框架的认证组件核心代码:    self.perform_authentication(request) 框架自带模块:   fromrest_frameworkimportauthentication 认证组件的返回值:request.user自定义的认证组件的钩子方法authenticator.authenticate(self);返... 查看详情

drf之视图组件(代码片段)

...和职业素养,也是帮助我们成长的非常重要的手段。相关知识点相关知识点一:RESTfulapi接口规范我给大家总结的REST的最重要的一句话,那就是:url用来唯一定位资源,http请求方式用来定位用户行为。根据这句话,我们设计了下... 查看详情

技术博客-1drf框架下的图片(文件)上传(代码片段)

技术博客DRF框架下的图片(文件)上传1、最终效果2、图片上传? alpha阶段实现了拥有题目和正文字段的意见反馈功能,为了更好的让用户反馈bug,beta阶段新增了图片上传功能。? 最终效果的实现难点主要在图片上传上,一开始觉... 查看详情

drf框架serializer之modelserializer(代码片段)

...性,因此会选择一种更为简洁的序列化器类来帮我们优化框架代码,简化序列化器类中字段的创建常规序列化器类示例:fromrest_frameworkimportserializersfromrest_frameworkimpo 查看详情

drf框架qq登录功能(代码片段)

用户模块---QQ登录流程图QQ登录文档:http://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0流程简述:1.当点击qq登录图标时,进入生成登录url的接口2.在前端的回调函数中跳转到qq登录的扫码页面3.扫码登陆后,qq会携带code访问申请时... 查看详情

drf框架之自定义action(代码片段)

一、自定义action使用action装饰器methods支持的请求方式,为一个列表,默认为[‘get‘]detail必传参数,要处理的是否是详情资源对象(即是否通过url路径获取主键)True表示需要传递主键id,使用通过URL获取的主键对应的数据对象Fal... 查看详情

drf框架路由组件(代码片段)

视图组件涉及的路由补充:  fromrest_framework.viewsetsimportViewSetMixin  对路由进行了重新的分发,重写了as_view()方法,重新封装了请求方法fromrest_framework.viewsetsimportViewSetMixinclassViewSetMixin(object):"""Thisisthemagic.Overrides`.as_view()`sothati... 查看详情

drf序列化(代码片段)

一、安装Django RESTframework框架使用命令:pipinstalldjangorestframework二、在setings里面注册INSTALLED_APPS=["rest_framework"]Serializers序列化组件 查看详情

drf框架之用户登录状态保持(代码片段)

   本篇主要介绍用户状态保持的两种的方案--session和jwt_token,以及这两种方案的实现方式,及优缺点对比。  引入:HTTP协议是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码进行用户认证... 查看详情

学习drf之前(代码片段)

 在学习DRF之前~我们要先复习一些知识点~~FBV和CBV的区别学习Django的时候~我们已经了解过CBV以及FBV什么是FBV和CBV呢~~  FBV基于函数的视图  CBV基于类的视图也就是说我们是用函数编写视图~还是类编写视图~~我们来看下两个... 查看详情