刘沙河 刘沙河
首页
  • Go语言基础

    • 数据类型
    • 反射
    • Go指针
  • Go语言进阶

    • go泛型
    • go条件编译
    • cgo教程
    • Go协程调度原理及GPM模型
    • Go内存管理
    • Go垃圾回收机制
    • Go语言内存对齐
  • Go语言实现原理

    • channel 实现原理
    • slice 实现原理
    • map 实现原理
    • sync.Mutex 实现原理
    • 乐观锁CAS 实现原理
    • singlefight 实现原理
  • gin框架

    • gin中间件原理
    • gin路由原理
  • gorm

    • GORM介绍和使用
    • GORM_CURD操作指南
  • go测试

    • benchmark基准测试
    • pprof 性能分析
  • python进阶

    • Numpy&Pandas
    • celery分布式任务队列
  • Django

    • Django 常见命令
    • middleware中间件
    • Django缓存系统
    • Django信号系统
    • Django REST Framework
  • Flask

    • Flask基础知识总结
    • Flask-SQLAlchemy
  • 爬虫

    • aiohttp
    • scrapy框架
  • Mysql

    • Mysql存储引擎和索引
    • MySQL主从复制
    • Mysql读写分离
    • 数据库分库分表
    • Mysql锁
    • Mysql事务和MVCC原理
    • 分库分表带来的读扩散问题
  • Redis

    • redis基础和数据类型
    • redis主从架构
    • redis哨兵架构
    • redis集群模式
    • 如何保证缓存和数据库双写一致
    • redis底层数据结构
    • redis分布式锁
  • Elasticsearch

    • es基本概念
    • es基础语法
    • es倒排索引
  • etcd

    • Go操作etcd
    • Raft原理
    • etcd分布式锁
  • kafka

    • 消息队列MQ总结
    • kafka 概述及原理
    • kafka 消费问题记录
    • 零拷贝技术
    • kafka分区规范
  • RabbitMQ

    • rabbitMQ基础
    • Go操作rabbitmq
  • RocketMQ

    • 可靠消息队列 rocketMQ
  • Http&Https

    • http&https
    • TCP和UDP
    • Ping 原理
  • RPC

    • RPC初识
    • grpc初识和实现
  • gRPC

    • grpc 初识
    • grpc 上下文 metadata
    • grpc 健康检查
    • grpc keepalive
    • grpc 命名解析
    • grpc 中间件&拦截器
    • grpc 负载均衡
    • grpc 身份认证
    • grpc 超时重试
    • grpc 链路追踪
    • grpc-gw将gRPC转RESTfu api
    • grpc-gw自定义选项
  • protobuf

    • protobuf 进阶
    • protobuf 编码原理
  • Docker

    • Docker基础
    • Docker常用命令
    • Dockerfile
    • Docker-Compose
    • Docker多阶段构建
    • Docker Config 教程
    • Docker Swarm 教程
    • Docker Stack 教程
    • Docker Buildx 教程
  • k8s

    • k8s 基础概念
    • k8s 集群架构
    • k8s 工作负载
    • Pod 网络
    • Service 网络
    • 外部接入网络
    • 一张图搞懂k8s各种pod
    • k8s 存储抽象
    • mac快速启动k8s
    • 自制申威架构k8s-reloader
  • go-kit

    • go-kit初识
    • go-kit启动http服务
    • go-kit集成gin启动服务
    • go-kit集成grpc和protobuf
    • go-kit中间件
    • go-kit服务注册发现与负载均衡
    • go-kit限流和熔断
    • go-kit链路追踪
    • go-kit集成Prometheus
  • 设计模式

    • 初识设计模式
    • 创建型模式
    • 结构型模式
    • 行为模式
  • 数据结构

    • 时间轮
    • 堆、双向链表、环形队列
    • 队列:优先队列
    • 队列:延迟队列
  • 算法

    • 递归算法
    • 枚举算法
    • 动态规划
    • 回溯算法
    • 分治算法
    • 贪心算法
    • LRU和LFU
    • 一致性哈希

花开半夏,半夏花开
首页
  • Go语言基础

    • 数据类型
    • 反射
    • Go指针
  • Go语言进阶

    • go泛型
    • go条件编译
    • cgo教程
    • Go协程调度原理及GPM模型
    • Go内存管理
    • Go垃圾回收机制
    • Go语言内存对齐
  • Go语言实现原理

    • channel 实现原理
    • slice 实现原理
    • map 实现原理
    • sync.Mutex 实现原理
    • 乐观锁CAS 实现原理
    • singlefight 实现原理
  • gin框架

    • gin中间件原理
    • gin路由原理
  • gorm

    • GORM介绍和使用
    • GORM_CURD操作指南
  • go测试

    • benchmark基准测试
    • pprof 性能分析
  • python进阶

    • Numpy&Pandas
    • celery分布式任务队列
  • Django

    • Django 常见命令
    • middleware中间件
    • Django缓存系统
    • Django信号系统
    • Django REST Framework
  • Flask

    • Flask基础知识总结
    • Flask-SQLAlchemy
  • 爬虫

    • aiohttp
    • scrapy框架
  • Mysql

    • Mysql存储引擎和索引
    • MySQL主从复制
    • Mysql读写分离
    • 数据库分库分表
    • Mysql锁
    • Mysql事务和MVCC原理
    • 分库分表带来的读扩散问题
  • Redis

    • redis基础和数据类型
    • redis主从架构
    • redis哨兵架构
    • redis集群模式
    • 如何保证缓存和数据库双写一致
    • redis底层数据结构
    • redis分布式锁
  • Elasticsearch

    • es基本概念
    • es基础语法
    • es倒排索引
  • etcd

    • Go操作etcd
    • Raft原理
    • etcd分布式锁
  • kafka

    • 消息队列MQ总结
    • kafka 概述及原理
    • kafka 消费问题记录
    • 零拷贝技术
    • kafka分区规范
  • RabbitMQ

    • rabbitMQ基础
    • Go操作rabbitmq
  • RocketMQ

    • 可靠消息队列 rocketMQ
  • Http&Https

    • http&https
    • TCP和UDP
    • Ping 原理
  • RPC

    • RPC初识
    • grpc初识和实现
  • gRPC

    • grpc 初识
    • grpc 上下文 metadata
    • grpc 健康检查
    • grpc keepalive
    • grpc 命名解析
    • grpc 中间件&拦截器
    • grpc 负载均衡
    • grpc 身份认证
    • grpc 超时重试
    • grpc 链路追踪
    • grpc-gw将gRPC转RESTfu api
    • grpc-gw自定义选项
  • protobuf

    • protobuf 进阶
    • protobuf 编码原理
  • Docker

    • Docker基础
    • Docker常用命令
    • Dockerfile
    • Docker-Compose
    • Docker多阶段构建
    • Docker Config 教程
    • Docker Swarm 教程
    • Docker Stack 教程
    • Docker Buildx 教程
  • k8s

    • k8s 基础概念
    • k8s 集群架构
    • k8s 工作负载
    • Pod 网络
    • Service 网络
    • 外部接入网络
    • 一张图搞懂k8s各种pod
    • k8s 存储抽象
    • mac快速启动k8s
    • 自制申威架构k8s-reloader
  • go-kit

    • go-kit初识
    • go-kit启动http服务
    • go-kit集成gin启动服务
    • go-kit集成grpc和protobuf
    • go-kit中间件
    • go-kit服务注册发现与负载均衡
    • go-kit限流和熔断
    • go-kit链路追踪
    • go-kit集成Prometheus
  • 设计模式

    • 初识设计模式
    • 创建型模式
    • 结构型模式
    • 行为模式
  • 数据结构

    • 时间轮
    • 堆、双向链表、环形队列
    • 队列:优先队列
    • 队列:延迟队列
  • 算法

    • 递归算法
    • 枚举算法
    • 动态规划
    • 回溯算法
    • 分治算法
    • 贪心算法
    • LRU和LFU
    • 一致性哈希
  • Python基础

  • Python进阶

  • Python并发编程

  • Django

    • django 常见命令
    • Django模板母版
    • Django视图
      • 1.CBV和FBV
      • 2.request对象
      • 3.response 对象
    • Django路由系统
    • Django--orm系统-指令&属性
    • Django--orm系统 -分组聚合
    • Django-cookie&session
    • middleware中间件
    • Django 的身份认证系统
    • Django models 之字段详解
    • Django缓存系统
    • Django数据库系统
    • Django信号系统
    • Django序列化和反序列化
    • Django中admin用法
    • DRF 版本、认证、权限、限制、解析器和渲染器
    • DRF(Django REST Framework)框架
  • Flask

  • 爬虫

  • Python
  • Django
bigox
2021-03-22
目录

Django视图

# 1.CBV和FBV

  • FBV -- function based view 函数视图
  • CBV -- class based view 类视图
  1. CBV应用

    #定义
    from django.views import View
    
    class AddPublisher(View): 
        #在views中创建好类,在url中调用的时需要在类名之后加上.as_view()方法
        
        def get(self,request):
            """处理get请求"""
            return response
        
        
        def post(self,request):
            """处理post请求"""
            return response
        
    #使用
    url(r'^add_publisher/', views.AddPublisher.as_view()),
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
  2. as_view()方法的执行的流程

    #源码as_view()

    1.项目启动时,加载url.py时,执行 类.as_view() ,返回一个view函数 #类中包含view函数;
    2.请求到来的时候执行view函数:
        (1)函数实例化自定义的类,并赋值给self  # self = cls(**initkwargs)
        	并执行  # self.request = request
        (2)view函数调用dispatch方法, #self.dispatch(request, *args, **kwargs)
        (3)在dispatch中,判断请求方式是否存在(被允许):
           - 允许(存在):,通过反射获取到与请求方式对应的方法,然后赋值给 handler
           - 不允许(不存在):handler = self.http_method_not_allowed
        (4)在disparch执行完毕后执行handler #handler()
        	- 把返回值返回给浏览器
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  3. FBV视图加装饰器

  • 直接加在对应的函数方法之上,无特殊性
  1. CBV加装饰器

    使用method_decorator之前首先要导入from django.utils.decorators import method_decorator模块,使用方法:@method_decorator(装饰器)

    • 加在方法上

      from django.utils.decorators import method_decorator  # 导入模块   --decorator 装饰
      
      @method_decorator(timer)
      def get(self, request, *args, **kwargs):
          """处理get请求"""
      
      1
      2
      3
      4
      5
    • 加在dispatch上

      #加在自定义的dispatch方法之上
      @method_decorator(timer)
      def dispatch(self, request, *args, **kwargs):		#类中自定义dispatch方法
          # print('before')
          ret = super().dispatch(request, *args, **kwargs) # 找到父级dispatch方法运行
          # print('after')
          return ret
      
      1
      2
      3
      4
      5
      6
      7
    • 加载类上(推荐)

      • 加在父类上

        #直接加在父类的dispath方法之上!!!
        @method_decorator(timer,name='dispatch')		# decorator 装饰  dispatch调度
        class AddPublisher(View):
        
        1
        2
        3
      • 加在本身类上

        @method_decorator(timer,name='post')
        @method_decorator(timer,name='get')
        class AddPublisher(View):
            def get(self,request)...
            def post(self,request)...
        
        1
        2
        3
        4
        5
    #使用method加装饰器和不使用时加装饰器的区别(了解)
    
    #不适用method_decorator
    func   ——》 <function AddPublisher.get at 0x000001FC8C358598>
    args  ——》 (<app01.views.AddPublisher object at 0x000001FC8C432C50>, <WSGIRequest: GET '/add_publisher/'>)  #第一个参数不是request
    
    #使用method_decorator之后:
    func ——》 <function method_decorator.<locals>._dec.<locals>._wrapper.<locals>.bound_func at 0x0000015185F7C0D0>
    args ——》 (<WSGIRequest: GET '/add_publisher/'>,) #第一个参数是request
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

# 2.request对象

  • 属性

    # 属性
    request.methot   获取当前请求方式  GET
    request.GET    获取url上携带的参数
    request.POST   获取POST请求提交的数据
    request.path_info   获取URL的路径    不包含ip和端口  不包含参数
    request.body    获取请求体  b''
    request.FILES   获取上传的文件
    request.META    获取请求头 
    
    request.COOKIES  cookie		(待讲解)
    request.session	 session	(待讲解)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
  • 方法

    # 方法
    request.get_host()    获取主机的ip和端口
    request.get_full_path()   获取URL的路径   不包含ip和端口 包含参数
    request.is_ajax()    判断是都是ajax请求
    
    1
    2
    3
    4
  • from表单上传文件注意事项:

    • 把input标签的type设置为file,并设置name

    • from表单中加入属性 enctype="multipart/form-data"

      <form action="" method="post" enctype="multipart/form-data">
          {% csrf_token %}
          <input type="file" name="f">
          <bottun>上传</bottun>
      </form>
      
      1
      2
      3
      4
      5
    • 在服务器获取

      • 使用request.FILE.get('name'),方法获取上传的文件对象

      • 使用f.chunks()获取文件对象的值

      • 文件对象具有name属性

        class Upload(View):
        
            def get(self, request):
                return render(request, 'upload.html')
        
            def post(self, request):
                f = request.FILES.get('f')   #获取文件对象
                with open(f.name, mode='wb')as F:
                    for i in f.chunks():	#读取内容
                        F.write(i)
                return render(request, 'upload.html')
        
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11

# 3.response 对象

#需要事先导入模块 from django.shortcuts import render, redirect, HttpResponse

  • HttpResponse('字符串') -默认属性-(**content-type='text/html')
    • 返回字符串
  • render(request,'模板的文件名',{k1:v1})
    • 返回一个完整的HTMl文件
  • redirect('重定向的地址')
    • 重定向 ,本质是返回一个 location: 地址 --响应头地址

#需要事先导入模块from django.http.response import JsonResponse

  • JsonResponse 把字典或者列表序列化之后再返回
    • JsonResponse({}) 字典序列化返回 -默认属性-(content-type='application/json')
    • JsonResponse([],safe=False) 列表序列化返回,要把safe的值设为False
#Python#
上次更新: 2023/04/16, 18:35:33
Django模板母版
Django路由系统

← Django模板母版 Django路由系统→

最近更新
01
go与http代理
05-24
02
自制申威架构k8s-reloader
12-06
03
Docker Buildx 教程
12-01
更多文章>
Theme by Vdoing | Copyright © 2020-2024 小刘扎扎 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式