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

学习python-Day66

时间:2022-09-29 19:12:13浏览次数:48  
标签:ser get python self request 学习 Day66 pk Response

今日学习内容

  • 前后端开发模式

  • API接口

  • postman使用

  • 序列化和反序列化

  • restful规范

  • drf:第三方app>>>快速实现符合restful规范的接口

  • 视图类,都是继承APIView及其子类、

  • cbv的执行流程

    • 路由中:视图类.as_view()>>>Viewas_View类的绑定方法>>>闭包函数View

    • 请求来了>>>执行闭包函数view(request)

      self.dispatch(request, *args, **kwargs)
      
    • View中返回dispatch根据请求的方式,执行视图函数中以请求方式命名的方法

    • 反射:通过字符串动态的获取,设置,判断,对象中的属性或方法

    • getattr  :  res = getattr(self, 'run', None)
      setattr  :  setattr(self, 'speak', 内存地址)
      hasattr  :  hasattr(self, 'run')
      
  • APIview 继承View, 执行流程

    • APIViewas_view调用了父类的as_view 去掉了csrf。请求来了,执行Viewas_view 的闭包view>>>dispatch实际上就是APIView中的dispatch

      • 核心代码中,产生了新的request
      • 执行视图函数之前,执行三大认证
      • 执行了视图函数,请求方式是什么,就执行视图函数中得什么方法
      • 全局异常捕获,全局异常,统一返回格式
  • 序列化类

    • Serializer
    • ModelSerializer
    • 序列化
    • 反序列化
    • 校验
  • 请求与响应

    • Request类:属性和方法
    • Response
  • 视图层(2基类,5个扩展类,9个子类)

  • 路由的使用

  • 认证,频率,权限

  • 过滤,排序,分页

  • 全局异常处理

  • 接口文档:自定生成

  • 前后端分离:jwt认证方式---登录

  • 公司内部:RBAC

  • django:admin 美化

2个视图基类

类属性:

queryset = User.objects.all()
serializer_class = UserSerializer

方法:

self.get_object() # 根据pk获取单个数据
self.get_serializer # 获取要使用的序列化类
self.get_queryset() # 获取所有要序列化数据

基于APIView写5个接口

class UserView(APIView):
    def get(self, request):
        book_list = User.objects.all()
        ser = UserSerializer(instance=book_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):
        book = User.objects.filter(pk=pk).first()
        ser = UserSerializer(instance=book)
        return Response(ser.data)

    def put(self, request, pk):
        book = User.objects.filter(pk=pk).first()
        ser = UserSerializer(instance=book, 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个接口

from rest_framework.generics import GenericAPIView
class UserView(GenericAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

    def get(self, request):
        book_list = self.get_queryset()
        ser = self.get_serializer(instance=book_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):
        book = self.get_object()
        ser = self.get_serializer(instance=book)
        return Response(ser.data)

    def put(self, request, pk):
        book = self.get_object()
        ser = self.get_serializer(instance=book, 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('')

作业:
image

标签:ser,get,python,self,request,学习,Day66,pk,Response
From: https://www.cnblogs.com/bjyxxc/p/16742670.html

相关文章

  • python如何制作并安装自建包?
    一、依赖首先检查python是否安装了wheel、setuptools包,没有则使用pip安装pipinstallwheel--force-reinstallpipinstallsetuptools--force-reinstall 二、准......
  • SpringCloud学习 系列四、微服务中心 Eureka介绍及创建一个Eureka中心服务
    不得不先介绍一个概念1、CAP 定理(1)概念CAP定理指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partitiontolerance(分区容错性),三者不可兼得。......
  • C++ 调用python方法
    主流方法将python程序编程文本形式的动态链接库,在c/c++程序中调用其中定义的函数。本质上是在c++中启动了一个python解释器,由解释器对python相关的代码进行执行,执行......
  • 跨模态学习能力再升级,EasyNLP电商文图检索效果刷新SOTA
    简介: 本⽂简要介绍我们在电商下对CLIP模型的优化,以及上述模型在公开数据集上的评测结果。最后,我们介绍如何在EasyNLP框架中调用上述电商CLIP模型。作者:熊兮、欢......
  • Python基础
    1.为什么学习Python2.Python和其他语言的区别从三个方面看Python语言特点语言类型第三方库3.Python的优势4.Python的解释器种类?5.python2和python3区别6.深拷贝......
  • UE4学习笔记2
    P8.创建项目全流程和模板试玩P9.2-1超详细编辑界面介绍P10.2-2视口导航(在视口界面移动视角)(P8)创建项目,没什么好说的,要注意选的是空白的还是带模板的,注意下面的存......
  • Python面向对象
    1.面向对象2.什么是类和类变量?3.实例和实例化以及实例变量4.数据成员5.方法和静态方法以及类方法6.什么是方法重写7.__init__8.self9.类的初始化:new()和i......
  • Python数据库编程
    1.什么是MySQLdb?2.如何连接数据库?3.如何创建数据库表?4.如何执行数据插入?5.如何执行数据库查询操作?6.如何更新数据库数据?7.如何删除数据库数据?8.如何使用数据库事......
  • Python常用类库
    1.什么是时间元组?2.使用datetime获取今天日期及前N天日期3.获取以秒为单位的浮点时间time():4.获取人可以直观理解的时间ctime():5.浮点时间转化为直观时间:6.获取格......
  • PythonWeb开发
    1.什么是Flask?有什么优点?2.Django和Flask有什么区别?3.Flask-WTF是什么,有什么特点?4.Flask脚本的常用方式是什么?5.如何在Flask中访问会话?6.解释PythonFlask中的数据......