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