DRF前置及初识

Posted on   呱呱呱呱叽里呱啦  阅读(16)  评论(0编辑  收藏  举报

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(内部通过装饰器将方法伪装成的属性)取出

(评论功能已被禁用)
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示