|
# 面向对象封装和继承的区别
1、封装可以self.里面属性取值,
2、但是你想把某个方法隐藏起来可以用self.__方法这样就不会给别人用了,
3、还有是self._可以让外部引用,但是不希望外部用
# 1、请求和响应
# 1.1 请求Request
# 请求对象对应参数意思
1、from rest_framework.request import Request
def __init__(self, request, parsers=None, authenticators=None,
negotiator=None, parser_context=None):
# 二次封装request,将原生request作为drf request对象的 _request 属性
self._request = request
def __getattr__(self,item):
return getattr(self._request,item)
2、[请求对象.data:前端以三种编码方式传入的数据,都可以取出来-
3、[请求对象..query_params 与Django标准的request.GET相同,只是更换了更正确的名称而已。]
# 2、响应Response
# 2.1 响应
from rest_framework.response import Response
def __init__(self, data=None, status=None,
template_name=None, headers=None,
exception=False, content_type=None):
1、data:你要返回的数据,字典 render处理前可以拿到,是字典
2、status:返回的状态码,默认是200,
-from rest_framework import status在这个路径下,它把所有使用到的状态码都定义成了常量
template_name 渲染的模板名字(自定制模板),不需要了解
3、headers:响应头,可以往响应头放东西,就是一个字典
4、[Django源生如何向head放东西,直接用HttpResponse[{token:'qwe']]
5、content_type:响应的编码格式,application/json和text/html; render处理后数据是一对字符串,然后给HttpResponse处理
# 浏览器响应成浏览器的格式,postman响应成json格式,通过配置实现的(默认配置)
不管是postman还是浏览器,都返回json格式数据
[drf有默认的配置文件---》先从项目的setting中找,找不到,采用默认的-
[drf的配置信息,先从自己类中找--》项目的setting中找---》默认的找]
-局部使用:对某个视图类有效
-在视图类中写如下
from rest_framework.renderers import JSONRenderer
renderer_classes=[JSONRenderer,]
-全局使用:全局的视图类,所有请求,都有效
-在setting.py中加入如下
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类
'rest_framework.renderers.JSONRenderer', # json渲染器
'rest_framework.renderers.BrowsableAPIRenderer', # 浏览API渲染器
)
}
# 5种请请求方法
from rest_framework.generics import GenericAPIView
from app01.models import Book
from app01.ser import BookSerializer
# 基于APIView写的
路由:path('books/', views.BookView.as_view()),
class BookView(APIView):
def get(self,request):
[ book_list=Book.objects.all()
book_ser=BookSerializer(book_list,many=True)]
return Response(book_ser.data)
def post(self,request):
book_ser = BookSerializer(data=request.data)
if book_ser.is_valid():
book_ser.save() book_ser用的orm中的保存所有不用重写方法
return Response(book_ser.data)
else:
return Response({'status':101,'msg':'校验失败'})
路由:re_path('books/(?P<pk>\d+)', views.BookDetailView.as_view()),
class BookDetailView(APIView):
def get(self, request,pk):
book = Book.objects.all().filter(pk=pk).first()
book_ser = BookSerializer(book)
return Response(book_ser.data)
def put(self, request,pk):
book = Book.objects.all().filter(pk=pk).first()
book_ser = BookSerializer(instance=book,data=request.data)
if book_ser.is_valid():
book_ser.save()
return Response(book_ser.data)
else:
return Response({'status': 101, 'msg': '校验失败'})
def delete(self,request,pk):
ret=Book.objects.filter(pk=pk).delete()
return Response({'status': 100, 'msg': '删除成功'})
# 基于GenericAPIView写的
class Book2View(GenericAPIView):
[ #queryset要传queryset对象,查询了所有的图书
# serializer_class使用哪个序列化类来序列化这堆数据,源码所得后面会自动加.all()所以可以将简写
queryset=Book.objects
# queryset=Book.objects.all()
serializer_class = BookSerializer]
def get(self,request):
book_list=self.get_queryset()
book_ser=self.get_serializer(book_list,many=True)
return Response(book_ser.data)
def post(self,request):
book_ser = self.get_serializer(data=request.data)
if book_ser.is_valid():
book_ser.save()
return Response(book_ser.data)
else:
return Response({'status':101,'msg':'校验失败'})
# 基于GenericAPIView写的Publish的5个接口
from app01.models import Publish
from app01.ser import PublishSerializer
class Publish2View(GenericAPIView):
[ #queryset要传queryset对象,查询了所有的图书
# serializer_class使用哪个序列化类来序列化这堆数据
queryset=Publish.objects
# queryset=Book.objects.all()
serializer_class = PublishSerializer]
def get(self,request):
book_list=self.get_queryset()
book_ser=self.get_serializer(book_list,many=True)
return Response(book_ser.data)
def post(self,request):
book_ser = self.get_serializer(data=request.data)
if book_ser.is_valid():
book_ser.save()
return Response(book_ser.data)
else:
return Response({'status':101,'msg':'校验失败'})
class Publish2DetailView(GenericAPIView):
[ queryset = Publish.objects
serializer_class = PublishSerializer]
def get(self, request,pk):
book = self.get_object()
book_ser = self.get_serializer(book)
return Response(book_ser.data)
def put(self, request,pk):
book = self.get_object()
book_ser = self.get_serializer(instance=book,data=request.data)
if book_ser.is_valid():
book_ser.save()
return Response(book_ser.data)
else:
return Response({'status': 101, 'msg': '校验失败'})
def delete(self,request,pk):
ret=self.get_object().delete()
return Response({'status': 100, 'msg': '删除成功'})
class Book2DetailView(GenericAPIView):
[ queryset = Book.objects
serializer_class = BookSerializer]
def get(self, request,pk):
book = self.get_object()
book_ser = self.get_serializer(book)
return Response(book_ser.data)
def put(self, request,pk):
[ book = self.get_object()
book_ser = self.get_serializer(instance=book,data=request.data)]
if book_ser.is_valid():
book_ser.save()
return Response(book_ser.data)
else:
return Response({'status': 101, 'msg': '校验失败'})
def delete(self,request,pk):
ret=self.get_object().delete()
return Response({'status': 100, 'msg': '删除成功'})
|
|