django的htpp请求之WSGIRequest
WSGIRequest对象
Django在接收到http请求之后,会根据http请求携带的参数以及报文信息创建一个WSGIRequest
对象,并且作为视图函数第一个参数传给视图函数。这个参数就是django视图函数的第一个参数,通常写成request。在这个对象上我们可以找到客户端上传上来的所有信息。这个对象的完整路径是django.core.handlers.wsgi.WSGIRequest
。
http请求的url详解:
在了解WSGIRequest对象的属性和方法之前,我们先了解一下url的组成,通常来说url的完整组成如下,[]为可选:
protocol ://hostname[:port]/path/[;parameters][?query]#fragment
- protocol: 网络协议,常用的协议有http/https/ftp等
- hostname: 主机地址,可以是域名,也可以是IP地址
- port: 端口 http协议默认端口是:80端口,在浏览器中默认会隐藏不显示
- path:路径 网络资源在服务器中的指定路径
- parameter: 参数 如果要向服务器传入参数,在这部分输入
- query: 查询字符串 如果需要从服务器那里查询内容,在这里编辑
- fragment:片段 网页中可能会分为不同的片段,如果想访问网页后直接到达指定位置,可以在这部分设置
WSGIRequest对象常用属性:
WSGIRequest
对象上大部分的属性都是只读的。因为这些属性是从客户端上传上来的,没必要做任何的修改,在django视图中使用时,视图函数的第一个参数参数request就是WSGIRequest对象。以下将对一些常用的属性进行讲解:
path
:资源在服务器的完整“路径”,但不包含域名和参数,在url中也是path的内容。比如http://www.baidu.com/xxx/yyy/
,那么path
就是/xxx/yyy/
。method
:代表当前请求的http
方法。比如是GET、
POST、delete或者是put等方法
GET
:一个django.http.request.QueryDict
对象。操作起来类似于字典。这个属性中包含了所有以?xxx=xxx
的方式上传上来的参数。POST
:也是一个django.http.request.QueryDict
对象。这个属性中包含了所有以POST
方式上传上来的参数。FILES
:也是一个django.http.request.QueryDict
对象。这个属性中包含了所有上传的文件。COOKIES
:一个标准的Python字典,包含所有的cookie
,键值对都是字符串类型。session
:一个类似于字典的对象。用来操作服务器的session
。user:user 只有当Django 启用 AuthenticationMiddleware 中间件时才可用。它的值是一个 setting.py 里面AUTH_USER_MODEL 字段所定义的类的对象,表示当前登录的用户。如果用户当前没有登录,user 将设为 django.contrib.auth.models.AnonymousUser 的一个实例。你可以通过 is_authenticated() 区分它们。
META
:存储的客户端发送上来的所有header
信息,下面是这些常用的header信息:CONTENT_LENGTH
:请求的正文的长度(是一个字符串)。CONTENT_TYPE
:请求的正文的MIME类型。HTTP_ACCEPT
:响应可接收的Content-Type。HTTP_ACCEPT_ENCODING
:响应可接收的编码,用于告知服务器客户端所能够处理的编码方式和相对优先级。HTTP_ACCEPT_LANGUAGE
: 响应可接收的语言。HTTP_HOST
:客户端发送的HOST值。HTTP_REFERER
:在访问这个页面上一个页面的url。QUERY_STRING
:单个字符串形式的查询字符串(未解析过的形式)。- TE:设置传输实体的编码格式,表示请求发起者愿意接收的Transfer-Encoding类型(传输过程中的编码格式,代理服务器之间)
REMOTE_ADDR
:客户端的IP地址。如果服务器使用了nginx
做反向代理或者负载均衡,那么这个值返回的是127.0.0.1
,这时候可以使用HTTP_X_FORWARDED_FOR
来获取,所以获取ip
地址的代码片段如下:if request.META.has_key('HTTP_X_FORWARDED_FOR'):
ip = request.META['HTTP_X_FORWARDED_FOR']
else:
ip = request.META['REMOTE_ADDR']
REMOTE_HOST
:客户端的主机名。REQUEST_METHOD
:请求方法。一个字符串类似于GET
或者POST
。SERVER_NAME
:服务器域名。SERVER_PORT
:服务器端口号,是一个字符串类型。
WSGIRequest对象常用方法:
is_secure()
:是否是采用https
协议。is_ajax()
:是否采用ajax
发送的请求。原理就是判断请求头中是否存在X-Requested-With:XMLHttpRequest
。get_host()
:服务器的域名。如果在访问的时候还有端口号,那么会加上端口号,在url中就是hostname+port。比如www.baidu.com:9000
。get_full_path()
:返回完整的path。如果有查询字符串,还会加上查询字符串,在url中就是path以及其后面的所有。比如/music/bands/?print=True
。get_raw_uri()
:获取请求的完整url
。
QueryDict对象:
我们平时用的request.GET、
request.POST和request.FILES
都是QueryDict
对象,这个对象继承自dict
,因此用法跟dict
相差无几。其中用得比较多的是get
方法和getlist
方法。
get
方法:用来获取指定key
的值,如果没有这个key
,那么会返回None
。getlist
方法:如果浏览器上传上来的key
对应的值有多个,如果使用get取值,那么你只能取出最后面一个值,如果你想取到所有的值,那么就需要通过getlist这个方法获取。
django的htpp请求之WSGIRequest的更多相关文章
- 玩转Django的POST请求 CSRF
玩转Django的POST请求 CSRF 不少麻油们玩django都会碰到这个问题,POST请求莫名其妙的返回 403 foribidden,希望这篇博文能解答所有问题 三种方法 To enable ...
- Django跨域请求之JSONP和CORS
现在来新建一个Django项目server01,url配置为 url(r'^getData.html$',views.get_data) 其对应的视图函数为get_data: from django. ...
- python——django的post请求
两次被同一块石头绊倒简直不可原谅!第一次写django程序的时候,就因为ajax post请求折腾了整整一天,时隔两个多月昨天又被虐一整晚.叔可忍婶儿也不能忍了!!!重要的事情写下来,为以后轻松碾压p ...
- django - django 承接nginx请求
# -*- coding: utf-8 -*- import os import sys import tornado.ioloop import tornado.web import tornado ...
- django 启动和请求
Django运行方式 调试模式 直接 python manage.py runserver python manage.py runserver python manage.py runserver ...
- django中HttpRequest请求
视图的第一个参数必须是HttpRequest对象 在视图函数中,接收的request有如下属性: path:一个字符串,表示请求的页面的完整路径,不包含域名. method:一个字符串,表示请求使用的 ...
- django rest-framework 2.请求和响应
一.请求对象 REST 框架引入Request来扩展常规的HttpRequest,并提供了更灵活的请求解析.Request对象的核心功能是request.data属性. 导入方式: from rest ...
- Django—跨域请求(jsonp)
同源策略 如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源. 示例:两个Django demo demo1 url.py url(r'^demo1/',demo1), vie ...
- Python3+Django get/post请求实现教程
一.说明 之前写了一篇“Python3+PyCharm+Django+Django REST framework开发教程”,想着直接介绍rest就完了.但回过头来看,一是rest在解耦的同时将框架复杂 ...
随机推荐
- XML中需要转义的字符
有的数据库表的字段名,对于某些数据库来讲,是属于关键字或者保留字来处理识别的,那么这个时候,需要对这样的字段名进行转义处理,一般在执行sql 语句脚本的情况,处理办法是在这个字段名外加上双引号就可以识 ...
- Hive(10)-文件存储格式
Hive支持的存储数据的格式主要有:TEXTFILE .SEQUENCEFILE.ORC.PARQUET 一. 列式存储和行式存储 左边为逻辑表,右边第一个为行式存储,第二个为列式存储 1. 行式存储 ...
- 使用Selenium慢慢向下滚动页面
我正试图从航班搜索页面抓取一些数据. 此页面以这种方式工作: 你填写一个表格,然后你点击按钮搜索 – 这没关系.当您单击该按钮时,您将被重定向到包含结果的页面,这就是问题所在.这个页面连续添加结果,例 ...
- 【二】Spark 核心
spark 核心 spark core RDD创建 >>> RDD转换 >>> RDD缓存 >>> RDD行动 >>> RDD输 ...
- Python学习 :常用模块(三)----- 日志记录
常用模块(三) 七.logging模块 日志中包含的信息应有正常的程序访问日志,还可能有错误.警告等信息输出 python的 logging 模块提供了标准的日志接口,你可以通过它存储各种格式的日志, ...
- ESP32 学习笔记 - Ubuntu安装
最近买了一个ESP32的开发板,以前只玩过ESP8266,没经验只能自己一步步摸索 现在把学习的过程记录下来,以免过了一段时间就忘记了 第一步安装 VMware 可以在我的网盘下载 链接:https: ...
- git如何到精通
git教程 目录 一.版本控制概要 1.1.什么是版本控制 1.2.常用术语 1.3.常见的版本控制器 1.4.版本控制分类 1.4.1.本地版本控制 1.4.2.集中版本控制 1.4.3.分布式 ...
- scala (8) 模糊匹配
object MatchDemo { /** * 定义偏函数用PartialFunction来表示 * PartialFunction[T1,T2]要求传入一个参数T1,T2代表返回的类型. * 偏函 ...
- # 2017-2018-1 20155336《信息安全技术》实验二——Windows口令破解
2017-2018-1 20155336<信息安全技术>实验二——Windows口令破解 实验原理 口令破解方法 口令破解主要有两种方法:字典破解和暴力破解. 字典破解是指通过破解者对管理 ...
- Docker入门篇(二)之docker的单主机网络
Docker 安装时会自动在host上创建三个网络,我们可用 docker network ls命令查看: [root@localhost ~]# docker network ls NETWORK ...