首页 > 其他分享 >DRF前置及初识

DRF前置及初识

时间:2022-11-27 21:48:10浏览次数:40  
标签:Book APIView 前置 request 初识 import view 源码 DRF

DRF前置及初识

目录

WEB应用(开发)模式

API接口

# 即通过网络,规定了前后台信息交互规则的URL链接,也就是前后台信息交互的媒介

postman的使用

# 一个用于发送http请求的工具
# params get方式就是请求地址中的参数,post方式就是请求体中的参数

# headers 即请求头

# body 编码格式等

Restful规范

# 10条规范
'''
1.数据的安全保障,采用https
2.接口的特征表现,即使用api关键字标识接口url
3.多数据版本共存,在url链接中标识数据版本
4.数据即资源,使用名词
5.资源操作由请求方式确定
6.过滤,即通过URL传参的方式传递搜索条件
7.响应状态码
8.错误处理,对错误应返回错误信息
9.返回结果符合规范
10.响应的数据里面可以带链接
'''

drf安装和使用

# settings INSTALLED APP中引入drf:'rest_framework'

# 配置数据库

# 在models.py中写表模型
class Book(models.Model):


# 新建一个python文件,书写与上述模型对应的序列化类
from rest_framework.serializers import ModelSerializer
from app01.models import Book

class BookModelSerializer(ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

# 在视图中写视图类
from rest_framework.viewsets import ModelViewSet
from .models import Book
from .ser import BookModelSerializer
class BooksViewSet(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookModelSerializer

# 配置路由关系
from app01 import views
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('books',views.BooksViewSet)

urlpatterns += router.urls

CBV源码

# ModelViewSet继承View(django原生View类)
# ModelViewSet>GenericViewSet>GenericAPIView>APIView>View

path('',views.Book.as_view()), # 此处应放函数内存地址
self.dispatch()

View源码

'''
dispatch逻辑:
判断是否在常规请求类型中,如果在:
通过反射拿到自定义类视图函数中的具体方法的对应地址(默认not_allowed)给handler
如果不在,拿not_allowed内存地址给handler
return handler(request,*args,**kwargs)
即到此执行FBV
'''

APIView源码

from rest_framework.views import APIView
# 局部禁用csrf,可以使用csrf_exempt(视图函数)
# APIView重写了as_view和dispatch方法
# APIView的as_view直接调用View中的as_view,然后封装进新的属性
# 在as_view return view后,路由匹配成功,view()会执行,并返回self.dispatch,根据MRO列表会自动选择APIView中的dispatch方法,该方法会将原来的request通过自定义的Request类封装进新的属性并返回新的request对象,通过request._request调用原request对象可以验证(仅验证),经过封装的新request对象使用原对象的属性,这是因为自定义的Request类重写了__getattr__方法,将self._request也就是原对象的属性返回了。

新request对象

# 无论post请求发送了什么格式的数据,都可以从request.data中取出相应的数据(FILES仍可用)
# 对于get请求,可以从request.query_params(内部通过装饰器将方法伪装成的属性)取出

标签:Book,APIView,前置,request,初识,import,view,源码,DRF
From: https://www.cnblogs.com/missfxy/p/16930678.html

相关文章

  • DRF路由、认证、权限、频率
    DRF路由、认证、权限、频率目录DRF路由、认证、权限、频率路由原来直接在urls.py中直接.as_view()即可现在继承了ModelViewSet的视图类action的使用认证源码写认证类认证......
  • DRF过滤、排序、异常处理、自定义Response、分页
    DRF过滤、排序、异常处理、自定义Response、分页目录DRF过滤、排序、异常处理、自定义Response、分页过滤局部过滤排序异常处理封装Response对象分页三种分页方式PageNumb......
  • Django初识
    Django初识目录Django初识基本操作项目主要文件介绍初始技巧静态文件配置Request对象form表单request.methodrequest.POSTrequest.GETpycharm连接数据库(MySQL)django连接数......
  • 68-72.图标的作用,初识matplotlib,简单绘图
            -------------------------------------------------------------------------------------------------------------------------------------......
  • HTML初识-概念和基本知识
    1.HTML初识-基础认知+HTML标签1.1目录◆基础认知◆HTML标签学习◆综合案例1.2学习目标◆能够理解HTML的基本语法和标签的关系◆能够使用排版标签实......
  • 初识春秋云镜靶场
    春秋云镜靶场2022.11.26这个靶场里面有很多CVE的漏洞,有免费的也有收费的(价格有点小贵),十分推荐大家去打一打这个靶场,去巩固自己的知识这篇文章的话是我个人的思路笔记,所......
  • go源码学习(零):前置知识-编译过程
    编译原理-从源码到机器码任何一门高级语言,要想最终能够在机器上执行那么就一定要从源码生成机器码,因为对于机器来说,它只认同由0和1组成的二进制程序。从人类可读的源码到......
  • 学习 vue3 第一天 vue3简介,创建vue3项目 Composition Api 初识
    前言:从今天开始来和大家一起学习vue3相信大家都不陌生,已经火了一段时间了,但是还是有不少人没有学习,那就跟着六扇老师来简单的入个门废话不多说,来开始今天的学习Vue3......
  • Django项目-001 初识Django
    1.django安装终端执行pip3.6installdjango终端执行进入某个目录(自定义),用于存放项目cd/dD:\new_learnPython环境C:\Python3.6.6\Scripts放到......
  • 截图工具(窗体永远前置)
    这是截完图之后可以显示并且永远前置的截图小工具(即不会被其他程序覆盖):##-*-coding:utf-8-*-importtkinterastkimportpyautoguiimporttkinterfromPILimp......