Django--request 对象

2023-11-07

目录

request对象方法

request对象介绍

请求相关的常用值

属性介绍

获取数据的方法


request对象方法

当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象.

Django会将这个对象自动传值给响应的视图函数,一般视图函数约定俗成低使用request参数承接这个对象. 

request对象介绍

后端接收到来自前端的信息几乎都来自于request中, 浏览器提交的请求分别为GET,POST两种. 所以在视图函数中, 对于不同的请求, 我们应该做出不同的响应, 

那么如何分辨是什么请求呢? 这就需要对request进行操作了

在试图函数中使用Debug模式运行.观察一下reauest对象

from django.shortcuts import render, HttpResponse, redirect


def index(request):
    print(request)

    return HttpResponse('6666')

结果为WSGIRequest 由wsgiref模块封装之后的对象, 

请求相关的常用值

  • path-info         返回用户访问url, 不包括域名
  • method         请求中使用的HTTP方法字符串, 全大写表示. 
  • GET        包含了所有含有HTTP GET参数的类字典对象
  • POST        包含了所有HTTP POST参数的类字典对象
  • body        请求体, byte类型, request.POST的数据就是从body中提取的

属性介绍

所有的属性应该被认为是只读的,除非另有说明

request.META

request.META获取的是一个标准的python字典, 它包含了所有的HTTP首部,具体的头部信息取决于客户端和服务器

1 CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。

2 CONTENT_TYPE —— 请求的正文的MIME 类型。

3 HTTP_ACCEPT —— 响应可接收的Content-Type。

4 HTTP_ACCEPT_ENCODING —— 响应可接收的编码。

5 HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。

6 HTTP_HOST —— 客服端发送的HTTP Host 头部。

7HTTP_REFERER —— Referring 页面。

8 HTTP_USER_AGENT —— 客户端的user-agent 字符串。

9 QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。

10 REMOTE_ADDR —— 客户端的IP 地址。

11 REMOTE_HOST —— 客户端的主机名。

12 REMOTE_USER —— 服务器认证后的用户。

13 REQUEST_METHOD —— 一个字符串,例如"GET" 或"POST"。

14 SERVER_NAME —— 服务器的主机名。

15 SE0RVER_PORT —— 服务器的端口(是一个字符串)
 

从上边的例子中考一看到, 除了COTENT_LENGTH 和CONTENT_TYPE之外, 请求中的任何HTTP首部转换为META时,都会将所有字母大写并将链接符替换成下划线之后加上HTTP_前缀. 

所以应该叫做X_Bender 的头部将转换成,META中的HTTP_XBENDER键.

获取请求的源主机: Request.get_host()

request.scheme>>> 请求的方式, 即http 或者https

request.path>>> 请求路径[相对路径],一个字符串表示请求的路径组件(不含域名) 

        eg: “/music/bands/the_beatles/”

获取完整路径(包括参数):HttprRquest.get_full_path()

获取绝对url:HttpRequest.bulid-absolute_url(location)此参数默认为完整路径

request.encoding

一个字符串. 表示提交数据的编码方式[如果为None 则表示使用DEFAULT_CHARSETde设置, 默认为'utf-8'']

这个属性是可写的, 你可以修改它;来修改访问表单数据使用的编码.接下来对属性的任何访问都将使用新的encoding值. 如果你知道表单数据的编码不是DEFAULT_charset,就是用它.

request.session

request.session获取的是一个类似于字典的对象, 可以进行读取写入操作,常用来保存一些数据来实现会话跟踪技术, 因为HTTP的特性之一就是无状态不连续的协议., 如果想让服务器记住当前的访问对象就需要记录请求者来的一些信息来达到目的

# 设置session
request.session["name"] = "root"

# 获取session
name = request.session["name"]

django会默认为session使用序列化所以session不能直接存储对象, 可以在settings中添加SESSION_SERIALIZER = "django.contrib.sessions.serializers.PickleSerializer"

request.COOKIES

一个标准的python字典, 包含所有的cookie,键和值都为字符串

与session类似了区别是cookies数据是保存在客户端的, session数据是保存在服务端的, 相对而言session更安全, cookies在不同的浏览器上保存数据的大小限制也不同, 一般不超过4kb[cookie工作原理类似于给客户端们打了通行证,每个客户端一个,无论谁访问都必须携带自己的通行证, 这样服务端就能从通行证上确认客户身份了. ]

# 设置cookies
response.set_cookie('name','root')
# 设置加密cookies
response.set_cookie('passsword','123456',salt='@#$!%^&')
# 获取cookie
request.COOKIES.get("name")
# 获取加密的cookie
request.get_signed_cookie("password",salt="@#$!%^&")

request.method

一个字符串,表示请求使用的HTTP方法, 必须要使用大写, POST/GET

获取数据的方法

request.body

请求的主体,返回的是一个字符串, 代表请求报文的主体

在处理非HTTP形式的人报文时非常有用, 例如二进制图片,XML,Json等. 但是 如果要处理表单数据的时候,推荐还是使用Request.POST. 另外, 我们还可以使用python的类文件方法去操作它, 详情参考Request.read()

request.data

请求的数据部分, 返回的是一个字典对象, 除此之外,与request.body是很类似的

request.POST

一个类似于字典的对象, 如果请求中包含表单数据

获取post方式表单中提交的数据

request.POST["username"]
request.POST.get("username")
request.POST.getlist("username")

注意: get方法只能获取表单中username的值的列表中的最后一个, 得到的是一个字符串类型: 

getlist 方法获取的才是完整的列表.

POST 请求可以带有空的POST字典---- 如果通过HTTP POST方法发送一个表单, 但是表单中没有任何数据, QueryDict对象依然会被创建,因此不该使用if request.POST来检查使用的是否时POST方法, 应该使用if request.method == 'POST"

如果使用POST上传文件的话, 文件信息将包含在FILES属性中

request.GET

一个类似字典的对象, 包含了HTTP GET的所有参数

获取url路径中?后提交的数据,不一定只获取GET方式提交的数据, 也可以是获取POST

request.GET["username"]
request.GET.get("username")
request.GET.getlist("username")

注意 get方法只能获取表单中username的值的最后一个, 得到的是一个字符串类型. getlist放放风获取的才是完整的列表. 

request.FILE

一个类似于字典的对象, 包含所有的上传文件信息, FiLES中的每个键为<input type="file" name="" /> 中的name,值则为对应的数据。

注意, FILES只有在请求的方法为POST且提交的<form>带有enctype="multipart/form-data"

的情况下才会包含数据, 否则FILS将为一个空的类似于字典的对象. 

-

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django--request 对象 的相关文章

  • 行未从树视图复制

    该行未在树视图中复制 我在按行并复制并粘贴到未粘贴的任何地方后制作了弹出复制 The code popup tk Menu tree opportunity tearoff 0 def row copy item tree opportun
  • 在Python3.6中调用C#代码

    由于完全不了解 C 编码 我希望在我的 python 代码中调用 C 函数 我知道有很多关于同一问题的问答 但由于一些奇怪的原因 我无法从示例 python 模块导入简单的 c 类库 以下是我所做的事情 C 类库设置 我使用的是 VS 20
  • 一次将Python dict的内容分配给多个变量?

    我想做这样的事情 def f return a 1 b 2 c 3 a b f or a b f IE 这样 a 被分配为 1 b 被分配为 2 并且 c 是未定义的 这与此类似 def f return 1 2 a b f 依赖于变量名称
  • python - 是否可以扩展 xml-rpc 可以序列化的事物集?

    我看到几个问题询问如何发送numpy ndarray通过 xml rpc 调用 这不能开箱即用 因为正如 xml rpc 中所述docs https docs python org 2 library xmlrpclib html 有一组固
  • Python 3 __getattribute__ 与点访问行为

    我读了一些关于 python 的对象属性查找的内容 这里 https blog ionelmc ro 2015 02 09 understanding python metaclasses object attribute lookup h
  • 如何使用Python将WebP图像转换为Gif?

    我已经尝试过这个 from PIL import Image im Image open this webp im save that gif gif save all True 这给了我这个错误 类型错误 不支持的操作数类型 tuple
  • 如何限制Django CreateView中ForeignKey字段的选择?

    我有一个沿着这些思路的模型结构 models py class Foo models Model class Bar models Model foo models ForeignKey Foo class Baz models Model
  • 如果字段值在外部列表中,Django 会注释布尔值

    想象一下我有这个 Django 模型 class Letter models Model name models CharField max length 1 unique True 还有这个列表 vowels a e i o u 我想查询
  • Python igraph:从图中删除顶点

    我正在使用安然电子邮件数据集 并尝试删除没有 enron com 的电子邮件地址 即我只想拥有安然电子邮件 当我尝试删除那些没有 enron com 的地址时 一些电子邮件由于某些原因被跳过 下面显示了一个小图 其中顶点是电子邮件地址 这是
  • 无法打开 Python。错误 0xc000007b

    我最近一直在学习 Python 3 我在我的上网本 32 位 Windows 7 上创建简单的小程序没有任何问题 当我将它安装在我的上网本上时 我没有遇到任何问题 但现在我已经开始使用它了 我想将它安装在我的台式机上 并且我有一个 我的桌面
  • 创建一个类似于 Tkinter 的表

    我希望创建类似于 Tkinter 中的表格的东西 但它不一定是这样的 例如 我想创建标题 Name1 Name2 Value 并在每个标题下面有几个空白行 然后 我希望稍后用我计算的值或名称的字符串值填充这些行 因此是标签 对于 Name2
  • spacy 如何使用词嵌入进行命名实体识别 (NER)?

    我正在尝试使用以下方法训练 NER 模型spaCy识别位置 人 名和组织 我试图理解如何spaCy识别文本中的实体 但我无法找到答案 从这个问题 https github com explosion spaCy issues 491在 Gi
  • 获取列表中倒数第二个元素[重复]

    这个问题在这里已经有答案了 我可以通过以下方式获取列表的倒数第二个元素 gt gt gt lst a b c d e f gt gt gt print lst len lst 2 e 有没有比使用更好的方法print lst len lst
  • 如何在Python和Selenium中通过标签名称或id获取元素[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 和 Selenium 获取输入 但它向我显示错误 我该如何解决这个错误 inputElement send keys getStock getStocklFunc 0 Error i
  • 无法截取宽度为 0 的屏幕截图

    我正在尝试截取 Bootstrap 模态内元素的屏幕截图 经过一番努力 我终于想出了这段代码 driver get https enlinea sunedu gob pe driver find element by xpath div c
  • 如何有效地从 loadmat 函数生成的嵌套 numpy 数组中提取值?

    python中是否有更有效的方法从嵌套的python列表中提取数据 例如A array array 12000000 dtype object 我一直在使用A 0 0 0 0 当你有很多像 A 这样的数据时 这似乎不是一个有效的方法 我也用
  • 导入错误:没有名为 google.auth 的模块

    当我尝试导入时firebase admin in python 2 7我收到错误 导入错误 没有名为 google auth 的模块 这是Docker文件 https github com ammaratef45 Attendance bl
  • Python 3.2 中 **kwargs 和 dict 有什么区别?

    看起来Python的很多方面都只是功能的重复 除了我在 Python 中的 kwargs 和 dict 中看到的冗余之外 还有什么区别吗 参数解包存在差异 许多人使用kwargs 并通过dict作为论据之一 使用参数解包 Prepare f
  • 如何在sphinx中启用数学?

    我在用sphinx http sphinx pocoo org index html与pngmath http sphinx pocoo org ext math html module sphinx ext pngmath扩展来记录我的代
  • 异步和协程与任务队列

    我一直在阅读有关 python 3 中的 asyncio 模块的内容 以及更广泛地了解 python 中的协程的内容 但我不明白是什么让 asyncio 成为如此出色的工具 我的感觉是 你可以用协程做的所有事情 通过使用基于多处理模块 例如

随机推荐

  • Candence中查看MOS管阈值电压Vth、Vgs、Vds、跨导gm、Id等详细MOS参数的方法

    Candence中查看MOS管阈值电压Vth Vgs Vds gm Id等详细MOS参数的方法 ADE仿真结束后 点击工具栏Results Print Transient Operating Points 如果是dc仿真就选DC Opera
  • LinearRegression,RidgeCV,LassoCV,ElasticNetCV各自使用场景

    LinearRegression RidgeCV LassoCV ElasticNetCV各自使用场景 概念 线性回归的目的是要得到输出向量Y和输入特征X之间的线性关系 求出线性回归系数 也就是Y X 其中Y的维度为m x 1 X的维度为
  • Sqlilabs-21

    来到了第 21 关 看着 21 关 我知道 第一阶段快结束了 马上要到 啪 给我认真写博文 这一关卡的题目给内容貌似一点都不符合 还是得从 cookie 下手 但肯定不跟20 关一样 通过提交正常的数据 我们可以看到 COOKIE 长的有点
  • 利用opencv提取纸张边缘

    纸张图像边框提取 摆正以及是否填写检测 JockerWong的博客 CSDN博客
  • Qt打包程序发布(适用小白)

    一 概述 自己用Qt写好程序 只能在自己电脑上运行 Debug调试版本 那如何发布 Release版本 呢 可以在别人电脑上运行呢 这篇文章超详细的介绍如何打包发布 二 环境 用QT 5 9 2 QT 5以上都可以 Enigma Virtu
  • 数据分析系列目录

    数据分析系列目录 统计学元知识 从一到全部 python数据分析复盘 爬虫相关库 Scrapy爬虫实例 南方都市报 python数据分析复盘 数据分析相关库之Numpy python数据分析复盘 数据分析相关库之Pandas python数
  • vue 数据导出

    思路 1 点击导出按钮 调用后台接口获取数据fid 2 调用下载接口 获取文件流 3 把文件流传给封装的下载方法 一 在目录下面准备mixins文件里面建file js文件 blobToExcel res name var blob new
  • 怎么用C++编个网站

    1 前言 用各种语言写过一些网站之后 我不禁开始好奇 C 能不能写网站呢 实际上想到这个问题的时候 我就大致有了答案 本文中我们将尝试用C 写一个简单的网站 探索一些细节性的问题 并报告用C 写网站的体验如何 2 准备工作 无论是之前比较传
  • 现代操作系统原理与实践01:操作系统概述

    目录 1 什么是操作系统 1 1 操作系统的功能 1 1 1 对硬件进行管理和抽象 1 1 2 为应用提供服务和管理 1 3 操作系统的结构 1 4 操作系统的发展趋势 1 5 操作系统面临的挑战 1 5 1 操作系统的可扩展性 1 5 2
  • Cacheable序列化配置

    import org springframework cache CacheManager import org springframework cache annotation CachingConfigurerSupport impor
  • IDEA左侧,按照文件夹排序

    看下图 一开始设置了是没有效果的 设置完要双击项目 把项目重新伸缩下 或者重启
  • 接口服务中的日志

    先来看下日志对于一个接口服务的作用 监控服务的状态 一般程序中会增加一些跟踪或者提示性的日志 用来判断服务执行的详细情况 特别是执行一些复合功能的接口或者叫聚合接口非常有利于我们判断接口的执行情况 安全 用来分析调用者的身份信息 防止接口被
  • Linux下安装Gurobi及通行证配置

    Linux下安装配置Gurobi 一 摘要 最近在写基于ROS的MPC控制要用到相应的求解器 商用的Gurobi求解器可以申请免费的license 1 下载Gurobi安装包 Gurobi官方网站 https www gurobi com
  • 完美解决 keil5.25 某宝Jlink无法使用问题

    首先再次声明下 支持正版 打击盗版 有钱就去买个正版的吧 最近开心地给实验室的电脑装上新版的Keil 5 25 可是装完后发现JLINK无法使用了 直接提示SN什么的 总之就是盗版问题 网上找个各种换 KEIL安装目录中的 ARM Segg
  • ERROR: Could not build wheels for dlib, which is required to install pyproject.toml-based project

    ERROR Could not build wheels for dlib which is required to install pyproject toml based project conda install dlib 报错 wh
  • Certificate for <xx.xxx.xxx.xxx> doesn‘t match any of the subject alternative names: [xx.xxxx.xxxx.

    1 用HttpClient发送Https请求报SSLException Certificate for lt 域名 gt doesn t match any of the subject alternative names问题的解决 报错
  • 分享一波js,node,vue等相关的书籍

    作者在空闲时间看了一些关于js node vue等相关的一些书籍 为了方便有需要的朋友一起学习 所以将这些书籍分享给大家 大家如果有需要的可以根据自己的需要下载 书籍清单 css相关 CSS那些事儿 flex布局相关 Flex 3权威指南
  • 修改ip地址软件就打不开_导致网站打不开的原因有哪些

    我们在网上查询资料时经常会遇到网站打不开 浏览器打不开的情况 这是上网时候广大网友经常碰见的问题 那么今天 天企网络将针对网页打不开这一问题问题做一做综合的分析 让您对网站打不开的原因有哪些有一个全面的了解 一 网络设置的问题 这种原因比较
  • CLR via C#(二)线程栈与托管堆

    一 System Object 运行时要求每个类型最终都要从System Object派生 它提供了如下几个基本方法 方法名 说明 Equals 虚方法 两个对象具有相同的值 就返回true GetHashCode 虚方法 返回对象的哈希码
  • Django--request 对象

    目录 request对象方法 request对象介绍 请求相关的常用值 属性介绍 获取数据的方法 request对象方法 当一个页面被请求时 Django就会创建一个包含本次请求原信息的HttpRequest对象 Django会将这个对象自