request.META里包含了哪些数据?
来源:互联网 发布:雅思测试软件 编辑:程序博客网 时间:2024/05/06 16:15
request.META 是一个Python字典,包含了所有本次HTTP请求的Header信息,比如用户IP地址和用户Agent(通常是浏览器的名称和版本号)。 注意,Header信息的完整列表取决于用户所发送的Header信息和服务器端设置的Header信息。 这个字典中几个常见的键值有:
- HTTP_REFERER,进站前链接网页,如果有的话。 (请注意,它是REFERRER的笔误。)
- HTTP_USER_AGENT,用户浏览器的user-agent字符串,如果有的话。 例如: "Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.8.1.17) Gecko/20080829 Firefox/2.0.0.17" .
- REMOTE_ADDR 客户端IP,如:"12.345.67.89" 。(如果申请是经过代理服务器的话,那么它可能是以逗号分割的多个IP地址,如:"12.345.67.89,23.456.78.90" 。)
- ……
因为 request.META 是一个普通的Python字典,因此当你试图访问一个不存在的键时,会触发一个KeyError异常。 (HTTP header信息是由用户的浏览器所提交的、不应该给予信任的“额外”数据,因此你总是应该好好设计你的应用以便当一个特定的Header数据不存在时,给出一个优雅的回应。)你应该用 try/except 语句,或者用Python字典的 get() 方法来处理这些“可能不存在的键”。
比如我要获得用户的浏览器信息,可以这么设计函数:
1
def
ua_display(request):
2
ua
=
request.META.get(
'HTTP_USER_AGENT'
,
'unknown'
)
3
return
HttpResponse(
"Your browser is %s"
%
ua)
网页输出:
1
Your browser
is
Mozilla
/
5.0
(Windows NT
6.1
; WOW64) AppleWebKit
/
537.36
(KHTML, like Gecko) Chrome
/
28.0
.
1500.95
Safari
/
537.36
或者这么写:
1
def
ua_display_2(request):
2
try
:
3
ua
=
request.META[
'HTTP_USER_AGENT'
]
4
except
KeyError:
5
ua
=
'unknown'
6
return
HttpResponse(
"Your browser is %s"
%
ua)
那么 request.META 里面还有什么有用的数据呢?动手写一个简单的view函数来显示 request.META 的所有数据,这样你就知道里面有什么了。
1
def
display_meta(request):
2
values
=
request.META.items()
3
values.sort()
4
html
=
[]
5
for
k, v
in
values:
6
html.append(
'<tr><td>%s</td><td>%s</td></tr>'
%
(k, v))
7
return
HttpResponse(
'<table>%s</table>'
%
'\n'
.join(html))
网页输出:
01
ALLUSERSPROFILE C:\ProgramData
02
COMMONPROGRAMFILES C:\Program Files\Common Files
03
COMSPEC C:\windows\system32\cmd.exe
04
CONFIGSETROOT C:\windows\ConfigSetRoot
05
CONTENT_LENGTH
06
CONTENT_TYPE text
/
plain
07
CSRF_COOKIE
8dLJLZyBH801ba24VdzYqJ81b5nqTxh0
08
DJANGO_SETTINGS_MODULE PythonProject.settings
09
FP_NO_HOST_CHECK NO
10
GATEWAY_INTERFACE CGI
/
1.1
11
HOMEDRIVE C:
12
HTTP_ACCEPT text
/
html,application
/
xhtml
+
xml,application
/
xml;q
=
0.9
,
*
/
*
;q
=
0.8
13
HTTP_ACCEPT_ENCODING gzip,deflate,sdch
14
HTTP_ACCEPT_LANGUAGE zh
-
CN,zh;q
=
0.8
15
HTTP_CONNECTION keep
-
alive
16
HTTP_COOKIE csrftoken
=
8dLJLZyBH801ba24VdzYqJ81b5nqTxh0
; sessionid
=
1rf6hmdw7k0zzsg8q3q1lw2j75gmoood
17
HTTP_HOST
127.0
.
0.1
:
8000
18
HTTP_USER_AGENT Mozilla
/
5.0
(Windows NT
6.1
; WOW64) AppleWebKit
/
537.36
(KHTML, like Gecko) Chrome
/
28.0
.
1500.95
Safari
/
537.36
19
NUMBER_OF_PROCESSORS
4
20
OS Windows_NT
21
PATH E:\Python;E:\Python\Scripts;C:\windows\system32;E:\Python
22
PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
23
PATH_INFO
/
display_meta
/
24
PROCESSOR_ARCHITECTURE AMD64
25
PROCESSOR_IDENTIFIER Intel64 Family
6
Model
42
Stepping
7
, GenuineIntel
26
PROCESSOR_LEVEL
6
27
PROCESSOR_REVISION
2a07
28
PROMPT $P$G
29
PSMODULEPATH C:\windows\system32\WindowsPowerShell\v1.
0
\Modules\
30
PUBLIC C:\Users\Public
31
QUERY_STRING
32
REMOTE_ADDR
127.0
.
0.1
33
REMOTE_HOST
34
REQUEST_METHOD GET
35
RUN_MAIN true
36
SERVER_PROTOCOL HTTP
/
1.1
37
SERVER_SOFTWARE WSGIServer
/
0.1
Python
/
2.7
.
5
38
SESSIONNAME Console
39
SHIM_MCCOMPAT
0x810000001
40
WINDOWS_TRACING_FLAGS
3
41
WINDOWS_TRACING_LOGFILE C:\BVTBin\Tests\installpackage\csilogfile.log
42
wsgi.errors
', mode '
w' at
0x00000000025C6150
>
43
wsgi.file_wrapper wsgiref.util.FileWrapper
44
wsgi.
input
45
wsgi.multiprocess
False
46
wsgi.multithread
True
47
wsgi.run_once
False
48
wsgi.url_scheme http
49
wsgi.version (
1
,
0
)
可以看到,request.META 包含的数据还是挺多的。用户浏览器信息只是它的其中一项而已。
0 0
- request.META里包含了哪些数据?
- request.META里包含了哪些数据?
- [Django与表单]request.META里包含了哪些数据?
- django request.META里包含了哪些数据?
- 数据库里写了很多存储过程,想用SQL语句查出哪些存储过程包含字段(如:user_id)
- Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?
- mssql里,寻找有哪些table包含某个字符串。
- ds&dm到底包含了哪些协议
- TCP和UDP各包含了哪些协议
- Hadoop的项目中包含了哪些产品?
- 查看打包的.ipa包含了哪些设备的UDID
- 请简要描述客户端发送的http request header都包含哪些内容
- 请简要描述客户端发送的http request header都包含哪些内容
- 简要描述客户端发送的http request header都包含哪些内容
- 请简要描述客户端发送的http request header都包含哪些内容
- 请简要描述客户端发送的http request header都包含哪些内容
- 请简要描述客户端发送的http request header都包含哪些内容
- 简要描述客户端发送的http request header都包含哪些内容
- 结构体、共用体、枚举和typedef
- Android学习 之 ColorStateList按钮文字变色
- 1712: 编程语言 (规律题)
- [Android]代码实现ColorStateList及StateListDrawable
- Linux服务管理-rpm的 xinet管理
- request.META里包含了哪些数据?
- Linux内核工程导论——内存管理(二)
- Android中asset文件夹和raw文件夹区别
- 用两个不规则容器倒出指定容量的水
- IOS CoreData
- HDU 2222 — Keywords Search
- How can i specify the resource to get from R.res.drawable dynamically?
- POJ 1422 && ZOJ 1525 --Air Raid【二分图 && 最小路径覆盖】
- [C++]ZigZag Conversion 之字形转换