首页 > 编程语言 >学习python-Day67

学习python-Day67

时间:2022-10-02 16:25:27浏览次数:47  
标签:__ return ser get python self request 学习 Day67

今日学习内容

2 个视图基类

属性 说明
queryset 要序列化的数据
serializer 序列化类
lookup_field(了解) 通过get_object 获取单个对象的查询key值,value值是路由中传来的
filter_backends(了解) 过滤类
pagination_class(了解) 分页类

.

方法 说明
get_queryset 获取要序列化的数据
get_object 根据lookup_field配置的参数获取单个对象
get_serializer 获取序列化类
get_serializer_class 获取序列化类,不是咱们直接用的get_serializer调用了它
filter_queryset(了解) 跟过滤有关系
paginate_xxx(了解) 跟分页有关

基于APIView写5个接口

class UserView(APIView):
    def get(self, request):
        res_list = User.objects.all()
        ser = UserSerializer(instance=res_list, many=True)
        return Response(ser.data)

    def post(self, request):
        ser = UserSerializer(data=request.data)
        if ser.is_valid():
            ser.save()
            return Response({'code': 100, 'msg': "新增成功"}, status=201)
        else:
            return Response({'code': 101, 'msg': ser.errors})


class UserDetailView(APIView):
    def get(self, request, pk):
        obj = User.objects.filter(pk=pk).first()
        ser = UserSerializer(instance=obj)
        return Response(ser.data)

    def put(self, request, pk):
        obj = User.objects.filter(pk=pk).first()
        ser = UserSerializer(instance=obj, data=request.data)
        if ser.is_valid():
            ser.save()
            return Response({'code': 100, 'msg': "修改成功"}, status=201)
        else:
            return Response({'code': 101, 'msg': ser.errors})

    def delete(self, request, pk):
        User.objects.filter(pk=pk).delete()
        return Response('')

基于GenericAPIView写5个接口

class UserView(GenericAPIView):
    # 配置两个 类属性
    queryset = User.objects.all()
    serializer_class = UserSerializer

    # def get_queryset(self):
    #     if self.request.method=='GET':
    #         return User.objects.all()
    #     else:
    #         return Publish.object.all()

    def get(self, request):
        res_list = self.get_queryset()  # 提高扩展性
        ser = self.get_serializer(instance=res_list, many=True)
        return Response(ser.data)

    def post(self, request):
        ser = self.get_serializer(data=request.data)
        if ser.is_valid():
            ser.save()
            return Response({'code': 100, 'msg': "新增成功"}, status=201)
        else:
            return Response({'code': 101, 'msg': ser.errors})


class UserDetailView(GenericAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

    def get(self, request, pk):
        # obj = self.get_queryset().filter(pk=pk).first()
        # queryset.get({'pk':'有名分组分出来的'}
        obj = self.get_object()  # 根据传入的pk,获取一条数据
        ser = self.get_serializer(instance=obj)
        return Response(ser.data)

    def put(self, request, pk):
        obj = self.get_object()
        ser = self.get_serializer(instance=obj, data=request.data)
        if ser.is_valid():
            ser.save()
            return Response({'code': 100, 'msg': "修改成功"}, status=201)
        else:
            return Response({'code': 101, 'msg': ser.errors})

    def delete(self, request, pk):
        self.get_queryset().filter(pk=pk).delete()
        return Response('')

5个视图扩展类

基于GenericAPIView+5个视图扩展类写接口

必须配合GenericAPIView使用,不能配合APIView使用
from rest_framework.mixins import RetrieveModelMixin, CreateModelMixin, UpdateModelMixin, DestroyModelMixin, \
    ListModelMixin
   
class UserView(GenericAPIView, ListModelMixin, CreateModelMixin):
    # 配置两个 类属性
    queryset = User.objects.all()
    serializer_class = UserSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)


class UserDetailView(GenericAPIView, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin):
    queryset = User.objects.all()
    serializer_class = UserSerializer

    def get(self,request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

    def put(self, request, *args,**kwargs):
        return self.update(request,*args,**kwargs)

    def delete(self, request, *args,**kwargs):
        return self.destroy(request,*args,**kwargs)

.

RetrieveModelMixin:写了一个Create方法,就是原来post中的代码
RetrieveModelMixin:retrieve,就是原来的get
UpdateModelMixin:update方法,就是原来的put
ListModelMixin:list方法,就是原来的get
DestroyModelMixin:destroy方法,就是原来咱们的delete

9个视图子类

基于9个视图子类写接口

视图类:继承GenericAPIView+某个或某几个视图扩展类
    
 
from rest_framework.generics import ListAPIView,CreateAPIView,   RetrieveAPIView,DestroyAPIView,UpdateAPIView
from rest_framework.generics import ListCreateAPIView,     RetrieveUpdateDestroyAPIView,RetrieveUpdateAPIView,RetrieveDestroyAPIView
# 正常来讲  Destroy+Update 应该有一个  ,作者没加
class UserView(ListCreateAPIView):
    # 配置两个 类属性
    queryset = User.objects.all()
    serializer_class = UserSerializer
class UserDetailView(RetrieveUpdateDestroyAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

视图集

继承ModelViewSet编写5个接口

视图类

from rest_framework.viewsets import ModelViewSet,ReadOnlyModelViewSet
class UserView(ModelViewSet):
   queryset = User.objects.all()
   serializer_class = UserSerializer
  
路由
path('user/', views.UserView.as_view({'get': 'list', 'post': 'create'})),
path('user/<int:pk>', views.UserView.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),

源码分析ViewSetMixin

@classonlymethod
def as_view(cls, actions=None, **initkwargs):
    # 路由中as_view中必须传参数,必须传字典:{'get': 'list', 'post': 'create'}
    if not actions: 
        raise TypeError("The `actions` argument must be provided when "
                        "calling `.as_view()` on a ViewSet. For example "
                        "`.as_view({'get': 'list'})`")
	# 路由匹配成功,执行view(request),request是老的request
    def view(request, *args, **kwargs):
	    # actions={'get': 'list', 'post': 'create'}
        for method, action in actions.items():
            # method:get      action:list
            # self 是视图类的对象中通过反射,查找list,
            # handler视图类中的list方法
            handler = getattr(self, action)
            # 向视图类的对象中,反射 method:get,handler:list方法
            # self.get=list
            setattr(self, method, handler)
        return self.dispatch(request, *args, **kwargs)
    return csrf_exempt(view)

知识点大串讲

  1. 计算机基础之编程

    • 计算机基础之编程
    • 计算机组成原理
    • 计算机操作系统
    • 编程语言分类
  2. Python解释器和集成环境

    • 解释器:3.10
    • pycharm,vscode
    • 配置清华源:第三方模块,国外
  3. Python基础

    • 变量:id type value === str, int, float, set, dict, list, tuple

    • 常量:全大写,没有特别的规定常量。

    • 注释

    • 数据类型基础:一切皆对象

      • 数字类型
      • 字符串类型 .endswith
      • 列表类型:append, extends区别
      • 字典类型
      • 布尔类型
    • 解压缩

    • Python与用户交互 input

    • 故事化输出的三种方式

    • 基本运算符:逻辑运算符, 算数运算符,成员运算符, 身份运算符

    • 流程控制之if判断

    • 流程控制之while循环

    • 流程控制之for循环:for i in xx : Python 中只有基于迭代的循环,没有基于索引的循环

    • Python基础实战之猜年游戏

  4. Python 进阶

    • 异常处理:try except finally , Exception, 自定义异常
    • 数字类型内置方法
    • 字符串类型内置方法
    • 列表类型内置方法
    • 元组类型内置方法
    • 字典类型内置方法
    • 集合类型内置方法
    • 数据类型分类:可变不可变
    • Python深浅拷贝(面试: copy,deepcopy)
  5. 文件处理

    • 字符编码:asiia,gbk,unicode,utf-8
    • 基本的文件操作:open
    • 绝对路径和相对路径
    • 文件的三种打开模式:r,w,a
    • with管理文件操作上下文
    • 文件的高级应用:rt,rb ,如果是以t方式打开,一定要指定编码
    • 文件修改的两种方式
    • 文件处理小结
    • 文件处理实战之购物车系统
  6. 函数基础

    • 函数的定义
    • 定义函数的形式
    • 函数的返回值
    • 函数的调用
    • 函数的参数:实参,形参
    • 可变长参数:*args,**kwargs,默认参数
    • 函数对象
    • 函数嵌套:定义:函数内定义函数 调用:函数内调用函数
    • 名称空间和作用域:LEGB
    • 函数基础小结
    • 函数基础实战之ATM和购物车系统
  7. 函数进阶

    • 闭包函数:1 定义在函数内部 2 对外部作用域有引用
    • 装饰器: 是闭包的典型应用
    • 迭代器:
    • 生成器: 函数中有 yield 关键字
    • 三元表达式:优雅的替换掉if判断
    • 列表推导式[]
    • 字典生成式{}
    • 生成器生成式()
    • 递归:递归调用,结束条件,最大递归深度
    • 匿名函数
    • 内置函数 type,intpu,map
  8. 模块和包基础

    • 模块的四种形式
    • import和from…import
    • 循环导入问题
    • 对导入和绝对导入
    • 模块的搜索路径
    • Python文件的两种用途:一个当模块给别人导,一个是当脚本运行
    • init
    • 软件开发目录规范
    • 模块基础小结
    • 模块基础实战之ATM和购物车系统分文件处理
  9. 内置模块

    • -time模块
    • -datetime模块
    • -random模块
    • -os模块
    • -sys模块
    • -json和pickle模块
    • -hashlib和hmac模块
    • -re模块:正则
    • -collections模块
    • -pathlib模块(了解)
    • -xml模块(了解)
    • -subprocess模块(了解)
  10. 面向对象基础

    • -面向对象的由来
    • -面向对象编程介绍
    • -类与对象
    • -定制对象独有特征:对象属性 dict
    • -对象属性查找顺序:先找对象,再找类
    • -对象的绑定方法
    • -类和数据类型:类即类型
    • -对象的高度整合:属性和方法放到一个类里---》对象
    • -面向对象基础实战之英雄联盟
    • -继承封装多态
    • -类的继承:多继承---》查找顺序
    • -类的派生:派生类,子类
    • -类的组合
    • -菱形继承问题
    • -super()方法详解
    • -类的多态和多态性
    • -类的封装:__隐藏属性或方法
    • -类的property特性
    • -类和对象的绑定方法及非绑定方法
    • -面向对象进阶实战之选课系统
  11. 面向对象高级

    isinstance和issubclass
    反射(hasattr和getattr和setattr和delattr) 
    ----------------------------------------------
    __setattr__和__delattr__和__getattr__
    -__setitem__和__getitem和__delitem__
    -__format__
    -__del__
    __slots__
    __doc__
    __call__
    -__init__和__new__
     __str__和__repr__
    -实现迭代器(__next__和__iter__)
    -__module__和__class__
    -实现文件上下文管理(__enter__和__exit__)
    -元类(metaclass)
    
  12. 网络编程(了解)

    • -网络架构及其演变过程
    • -互联网和互联网的组成
    • -OSI七层协议
    • -TCP协议的三次握手和四次挥手
    • -基于TCP协议的socket套接字编程
    • -Socket抽象层
    • -模拟ssh远程执行命令
    • -粘包问题
    • -解决粘包问题
    • -基于UDP协议的socket套接字编程
    • -基于socketserver实现并发的socket套接字编程
  13. 并发编程(了解)

    • 操作系统的发展史
    • 进程基础
    • 进程调度
    • 进程的并行和并发
    • 同步异步阻塞非阻塞
    • 进程的创建和结束
    • 开启多进程(multiprocess.process)
    • 进程同步(multiprocess.Lock)
    • 进程间通信(multiprocess.Queue)
    • 进程间数据共享(multiprocess.Manager)
    线程基础
    进程和线程的区别
    使用线程的场景
    内存中的线程
    GIL全局解释器锁
    创建多线程
    守护线程
    锁-信号量-Event事件
    线程队列
    concurrent模块
    
    协程基础
    协程之greenlet模块
    协程之gevent模块
    IO模型:面试重点
    并发编程小结
    并发下的socket套接字编程
    
  14. 数据库基础(重点)

    • -初识MySQL
    • -Windows安装MySQL
    • -Linux安装MySQL
    • -Mac安装MySQL
    • 6-MySQL存储引擎概述
    • -MySQL库操作-表操作
    • -MySQL支持的数据类型
    • -MySQL表的完整性约束
    • -MySQL记录操作
    • -MySQL单表查询
    • -MySQL多表查询
    • -MySQL多表查询综合练习答案
    • -MySQL索引原理
    • -MySQL索引的数据结构-B+树介绍
    • -MySQL性能分析之Explain
    • -使用Python操作MySQL数据库
  15. 前端

    • -HTML5基础
    • -HTML5常用标签
    • -CSS基础
    • -CSS3选择器
    • -CSS3基础样式
    • -CSS3基础布局
    • JavaScript基础
    • JavaScript基本数据类型
    • JavaScript函数
    • JS的BOM操作
    • JS的DOM操作
    • JQuery基础
    • JQuery选择器
    • JQuery文本属性样式操作
    • JQuery操作DOM
    • JQuery动画效果
    • JQuery插件
    • BootStrap基础
    • BootStrap布局
    • BootStrap组件
    • BootStrap插件
  16. Django入门(重点)

    • Web应用

    • Http协议

    • Web框架:django,flask,sanic,fastapi。。。。。

    • Django简介

  17. Django进阶(重点)

    • 路由层:
      • -路由控制
    • 视图层:
      • -视图层
    • 模板层:
      • -模板层
    • 模型层:
      • -单表操作 –|| –
      • -多表操作 –|| –
      • -其他用字段和参数 –|| –
      • -模型层进阶
  18. Django高级

    • -Django与Ajax
    • 13-Django高级之-分页器
    • 14-Django高级之-forms组件
    • 15-Django高级之-cookie与session
    • 16-Django高级之-中间件
    • 17-Django高级之-Auth

作业

视图中所有类:继承关系画出来,有哪些常用属性或方法写出来

标签:__,return,ser,get,python,self,request,学习,Day67
From: https://www.cnblogs.com/bjyxxc/p/16748947.html

相关文章

  • 学习记录13标准的JavaBean类
    标准的JavaBean类类名需要见名知意成员变量使用private修饰提供至少两个构造方法无参构造方法带全部参数的构造方法成员方法提供每一个成员变量对应的setXxx()......
  • 2022-2023-1 20221327《计算机基础与程序设计》第五周学习总结
    作业信息这个作业属于哪个课程:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作业要求在哪里:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05作业目......
  • 2022-2023-1 20221415 《计算机基础与程序设计》第五周学习总结
    学期(如2022-2023-1)学号(如:20221300)《计算机基础与程序设计》第X周学习总结作业信息这个作业属于哪个课程<班级的链接>(2022-2023-1-计算机基础与程序设计)这个作......
  • Markdown学习
    Markdown字体helloworldhelloworldhellowordhelloworld分割线引用锄禾日当午图片超链接链接到百度表格姓名性别年龄张三男26列表......
  • 教材第11章学习笔记
    EXT2文件系统知识点归纳EXT2:体现文件系统设计和实现的原则磁盘块的内容:Block#0:引导块Block#1:超级块【用于容纳整个文件系统的信息】Block#2:块组描述符块【磁盘块......
  • 2022-2023-1 20221328 《计算机基础与程序设计》第五周学习总结
    作业信息班级:首页-2022-2023-1-计算机基础与程序设计-北京电子科技学院-班级博客-博客园(cnblogs.com)作业要求:2022-2023-1《计算机基础与程序设计》教学进程......
  • 老猿理解的Python中的垃圾回收机制
    垃圾回收机制(GC)是所有高级语言的标准配置之一。在一定程度上可以优化编程语言的数据处理效率,提高编程软件开发软件的安全性能。Python中的垃圾回收机制主要基于引用计数,......
  • 机器学习可解释性--LIME源码阅读
    首先,访问github上的LIME源码,https://github.com/marcotcr/lime​将代码克隆至本地。我用的是pycharm打开进行阅读。下载下来后使用pipinstall.,别......
  • python识别ico hash值
    用python识别icohash值,通过shodan搜索icohash值的网站,网上较为多流行的是用python2写的,但考虑到现在都是python3,这个脚本也跑不起来,所以自己重写了一个python3版本 需......
  • 2022-2023-1 20221306《计算机基础与程序设计》第五周学习总结
    作业信息这个作业属于哪个课程:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作业要求在哪里:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05作业目......