当前位置: 首页 > news >正文

Django知识

目录

一.request对象方法

1.request.method

2.request.POST

3.request.GET

4.request.FILES

5.request.path

二.FBV与CBV引入

1.FBV

2.CBV

(1)路由

(2)视图

3.详解

(1)FBV

(2)CBV

(3)小结

三.CBV源码剖析

1.as_view方法

(1)路由对应函数内存地址

(2)view方法剖析

(3)小结


一.request对象方法

1.request.method

该方法返回客户端用于发起请求的HTTP方法,例如可以是'GET','POST','PUT','DELETE'等,可以使用该方法来确定请求的类型,并相应的执行特定操作

2.request.POST

该属性是一个类似字典的对象,包含了请求中通过POST方法发送的所有参数,这些参数通常是通过HTML表单发送的,可以使用参数的名字作为键来访问单个参数

3.request.GET

类似于request.POST,该属性包含了请求中通过GET方法发送的所有参数,这些参数通常会附加在URL之后,以问号分隔,可以使用参数的名字作为键来访问单个参数

4.request.FILES

该属性是一个类似字典的对象,包含了请求中通过文件上传组件发送的所有文件,当表单中包含文件上传字段时,通过request.FILES可以访问上传的文件,可以使用文件的名字作为键来访问单个文件

5.request.path

只能获取到路由地址,无法获取到参数

二.FBV与CBV引入

视图函数既可以是函数也可以是类

1.FBV

def index(request):return HttpResponse('index')

2.CBV

(1)路由

# CBV路由 根据请求方式的不同选择不同的入口动作
url('^login/',views.MyLogin.as_view())

(2)视图

from django.views import Viewclass MyLogin(View):def get(self,request,*args,**kwargs):return HttpResponse("get")def post(self,request,*args,**kwargs):return HttpResponse("post")

3.详解

FBV(Function-Based Views)与 CBV(Class-Based Views)是 Django 框架中用于处理视图(Views)的两种不同的编程方式。

(1)FBV

  • FBV是Django最早支持的一种视图编程方式
  • 使用函数作为视图的处理逻辑,函数参数通常是request对象,表示用户发送的HTTP请求
  • 函数内部可以根据请求方法、参数、数据等进行相应的处理,并返回HttpResponse对象作为响应
from django.http import HttpResponsedef my_view(request):# 处理逻辑if request.method == 'GET':# 处理 GET 请求return HttpResponse('Hello, GET Request!')elif request.method == 'POST':# 处理 POST 请求return HttpResponse('Hello, POST Request!')

(2)CBV

  • CBV是Django提供的另一种视图编程方式,引入了面向对象的概念
  • 使用类来表示视图,并使用类中的方法来处理不同类型的HTTP请求
  • Django提供了许多内置的CBV类,可以方便的扩展和重写这些类来实现自定义功能
from django.http import HttpResponse
from django.views import Viewclass MyView(View):def get(self, request):# 处理 GET 请求return HttpResponse('Hello, GET Request!')def post(self, request):# 处理 POST 请求return HttpResponse('Hello, POST Request!')

(3)小结

  • 选择FBV还是CBV取决于具体的需求和个人偏好
  • FBV相对简单直观,适合编写简单的视图逻辑
  • CBV可以通过继承和重写类来实现代码复用和可扩展性,适用于复杂的视图处理场景
  • 在实际开发中,可以根据需求选择适合的方式来编写视图处理函数或类

三.CBV源码剖析

1.as_view方法

(1)路由对应函数内存地址

url(r'^login/', views.MyLogin.as_view()),

方法/函数名 加 括号 执行优先级最高

  • 可能的原因
    • 要么是被@staicmethod方法修饰的静态方法
    • 要么是被@classmethod方法修饰的类方法
  • 查看源代码
    • 绑定给类的静态方法,将类作为第一个参数传进去
	@classonlymethoddef as_view(cls, **initkwargs):"""Main entry point for a request-response process."""for key in initkwargs:if key in cls.http_method_names:raise TypeError("You tried to pass in the %s method name as a ""keyword argument to %s(). Don't do that."% (key, cls.__name__))if not hasattr(cls, key):raise TypeError("%s() received an invalid keyword %r. as_view ""only accepts arguments that are already ""attributes of the class." % (cls.__name__, key))def view(request, *args, **kwargs):self = cls(**initkwargs)if hasattr(self, 'get') and not hasattr(self, 'head'):self.head = self.getself.request = requestself.args = argsself.kwargs = kwargsreturn self.dispatch(request, *args, **kwargs)view.view_class = clsview.view_initkwargs = initkwargs# take name and docstring from classupdate_wrapper(view, cls, updated=())# and possible attributes set by decorators# like csrf_exempt from dispatchupdate_wrapper(view, cls.dispatch, assigned=())return view
  • view这是一个闭包函数
    • 返回值是这个闭包函数的内存地址
  • 在启动Django项目时,就会立即执行as_view方法
url(r'^login/',views.view()),
  • 方法类似FBV方法

总结:CBV和FBV在路由匹配本质上是一样的,都是路由对应函数内存地址

(2)view方法剖析

    def view(request, *args, **kwargs):# 参数 cls 就是我们自己写的类self = cls(**initkwargs)# 等价于 self = MyLogin(**initkwargs) ---- 产生一个我们自己写的类的对象if hasattr(self, 'get') and not hasattr(self, 'head'):self.head = self.get# 给我们的对象赋值属性self.request = requestself.args = argsself.kwargs = kwargs'''在看python源码的时候,一定要时刻注意面向对象属性方法查找顺序先从对象自己找再去产生对象的类里面找之后再去父类找总结:在看源码时,如果遇到 self.x 操作时,一定要时刻注意当前这个self到底是谁'''return self.dispatch(request, *args, **kwargs)
 http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']# CBV 的 精髓 !!!def dispatch(self, request, *args, **kwargs):# Try to dispatch to the right method; if a method doesn't exist,# defer to the error handler. Also defer to the error handler if the# request method isn't on the approved list.# 获取当前请求的小写格式 然后比对当前请求方式是否合法# 以 get 请求为例if request.method.lower() in self.http_method_names:'''反射:通过字符串来操作对象的属性或方法'''# self 是我们自己写的类产生的对象# handler = getattr(自己写的类产生的对象,'get',当找不到get属性或方法时就会用到第三个参数)# 因为我们在自己的类里面重写了 get 方法 ,所以这里的 handler 就变成了我们自己写的 get方法# handler = 我们自己写的类里面的get方法handler = getattr(self, request.method.lower(), self.http_method_not_allowed)else:handler = self.http_method_not_allowed# 自动调用 get 方法return handler(request, *args, **kwargs)

(3)小结

url(r'^login/', views.MyLogin.as_view()),
  • 当我们启动Django项目时
  • 会自动触发路由中的方法,调用 as_view 方法并自执行
  • 在执行后我们查看 as_view 方法的源码 发现
    • 在依次给我们的对象赋值后,最终返回了一个自执行的 dispatch 方法
  • 于是我们又去查看了 dispatch 方法
    • 在 dispatch 内部 ,先是将请求方式转换并进行校验
    • 然后开始校验需要调用的方法的调用位置,校验成功并拿到需要执行的方法执行
  • 在自己写的类中如果有相关的方法,会首先调用我们重写的类方法,并返回执行结果
    • 如果自己的类里面没有该方法 会去自己的父类中调用 父类的方法
      • 如果父类 以及 基类 都找不到则报错,抛出异常

相关文章:

Django知识

目录 一.request对象方法 1.request.method 2.request.POST 3.request.GET 4.request.FILES 5.request.path 二.FBV与CBV引入 1.FBV 2.CBV (1)路由 (2)视图 3.详解 (1)FBV (2)CBV (3)小结 三.CBV源码剖析 1.as_view方法 (1)路由对应函…...

vue2+antd——实现权限管理——js数据格式处理(回显+数据结构渲染)

vue2antd——实现权限管理——js数据格式处理 效果图如下:1.需求说明2.如何展开所有子项及孙子项目——在弹窗之前就获取树形结构,然后直接将数据传到弹窗中3.template部分代码4.script的data部分5.权限tree数据处理——将row中的权限分配到具体的value参…...

ffmpeg 4.4 cenc-aes-ctr 加解密 MP4 工程性质分析

目录 一、cenc-aes-ctr 原理介绍 二、显式 cenc-aes-ctr 和隐式 cenc-aes-ctr 三、加密工具---ffmpeg 四、播放---ffplay 五、总结 ​​​​​​​一、cenc-aes-ctr 原理介绍 加密算法:CENC-AES-CTR 使用 AES(Advanced Encryption Standard&…...

网络安全/黑客技术(0基础入门到进阶提升)

前言 前几天发布了一篇 网络安全(黑客)自学 没想到收到了许多人的私信想要学习网安黑客技术!却不知道从哪里开始学起!怎么学 今天给大家分享一下,很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习…...

栈的三道oj【C++】

栈和队列的相关oj 最小栈思路解决代码 栈的压入弹出序列思路解决代码 逆波兰表达式思路:解决代码 这里就挑了三道题用来熟悉栈 最小栈 力扣链接 咱们已经是高贵的C使用者了,不用像C语言一样从头开始造轮子了 这里我们调用了stack后,就会发…...

AI大模型低成本快速定制法宝:RAG和向量数据库

文章目录 1. 前言2. RAG和向量数据库3. 论坛日程4. 购票方式 1. 前言 当今人工智能领域,最受关注的毋庸置疑是大模型。然而,高昂的训练成本、漫长的训练时间等都成为了制约大多数企业入局大模型的关键瓶颈。 这种背景下,向量数据库凭借其独特…...

文旅媒体有哪些?如何邀请到现场报道?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 中国文旅产业在近年来得到了持续而快速的发展。从产业端看,中国文旅产业呈现出新的发展趋势,其中“文旅”向“文旅”转变成为显著特点。通过产业升级和空间构建&a…...

搭建知识付费系统的最佳实践是什么

在数字化时代,搭建一个高效且用户友好的知识付费系统是许多创业者和内容创作者追求的目标。本文将介绍一些搭建知识付费系统的最佳实践,同时提供一些基本的技术代码示例,以帮助你快速入门。 1. 选择合适的技术栈: 搭建知识付费…...

计算机视觉:使用opencv实现车牌识别

1 引言 汽车车牌识别(License Plate Recognition)是一个日常生活中的普遍应用,特别是在智能交通系统中,汽车牌照识别发挥了巨大的作用。汽车牌照的自动识别技术是把处理图像的方法与计算机的软件技术相连接在一起,以准…...

用封面预测书的价格【图像回归】

今天,我将介绍计算机视觉的深度学习应用,用封面简单地估算一本书的价格。 我没有看到很多关于图像回归的文章,所以我为你们写这篇文章。 距离我上一篇文章已经过去很长时间了,我不得不承认,作为一名数据科学家&#x…...

阿里云服务器e实例40G ESSD Entry系统盘、2核2G3M带宽99元

阿里云99元服务器新老用户同享2核2G经济型e实例、3M固定带宽和40G ESSD Entry系统盘,老用户也可以买,续费不涨价依旧是99元一年,阿里云百科aliyunbaike.com分享阿里云3M带宽服务器40G ESSD Entry云盘性能说明: 阿里云99元服务器配…...

Datawhale智能汽车AI挑战赛

1.赛题解析 赛题地址:https://tianchi.aliyun.com/competition/entrance/532155 任务: 输入:元宇宙仿真平台生成的前视摄像头虚拟视频数据(8-10秒左右);输出:对视频中的信息进行综合理解&…...

pyclipper和ClipperLib操作多边型

目录 1. 等距离缩放多边形 1.1 python 1.2 c 1. 等距离缩放多边形 1.1 python 环境配置pip install opencv-python opencv-contrib-python pip install pyclipper pip install numpy import cv2 import numpy as np import pyclipperdef equidistant_zoom_contour(contour…...

Golang 协程、主线程

Go协程、Go主线程 1)Go主线程(有程序员直接称为线程/也可以理解成进程):一个Go线程上,可以起多个协程,你可以这样理解,协程是轻量级的线程。 2)Go协程的特点 有独立的栈空间 共享程序堆空间 调度由用户控制 协程是轻量级的线程 go线程-…...

【SA8295P 源码分析】125 - MAX96712 解串器 start_stream、stop_stream 寄存器配置 过程详细解析

【SA8295P 源码分析】125 - MAX96712 解串器 start_stream、stop_stream 寄存器配置 过程详细解析 一、sensor_detect_device():MAX96712 检测解串器芯片是否存在,获取chip_id、device_revision二、sensor_detect_device_channels() :MAX96712 解串器 寄存器初始化 及 detec…...

pandas教程:Apply:General split-apply-combine 通常的分割-应用-合并

文章目录 10.3 Apply:General split-apply-combine(应用:通用的分割-应用-合并)1 Suppressing the Group Keys(抑制组键)2 Quantile and Bucket Analysis(分位数与桶分析)3 Example:…...

第一讲之递归与递推下篇

第一讲之递归与递推下篇 带分数费解的开关飞行员兄弟翻硬币 带分数 用暴力将所有全排列的情况都算出来 > 有三个数,a,b,c 每种排列情况,可以用两层for循环,暴力分为三个部分,每个部分一个数 当然注意这里,第一层fo…...

第十六篇-Awesome ChatGPT Prompts-备份

Awesome ChatGPT Prompts——一个致力于提供挖掘ChatGPT能力的Prompt收集网站 https://prompts.chat/ 2023-11-16内容如下 ✂️Act as a Linux Terminal Contributed by: f Reference: https://www.engraved.blog/building-a-virtual-machine-inside/ I want you to act as a…...

Python Web框架Django

Python Web框架Django Django简介第一个Django应用Django核心概念Django django-adminDjango项目结构Django配置文件settingsDjango创建和配置应用Django数据库配置Django后台管理Django模型Django模型字段Django模型关联关系Django模型Meta 选项Django模型属性ManagerDjango模…...

1.Spring的简单使用

简介 本文是介绍spring源码的开始,先了解最基础的使用,最深入源码。 spring源码下载地址 https://github.com/spring-projects/spring-framework.git 依赖 依赖 spring-context dependencies {implementation(project(":spring-context")…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中&#xff0…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...