详解Django中Request对象的相关用法
1、从Request对象中获取数据
我们在第三章讲述View的函数时已经介绍过HttpRequest对象了,但当时并没有讲太多。 让我们回忆下:每个view函数的第一个参数是一个HttpRequest对象,就像下面这个hello()函数:
from django.http import HttpResponsedef hello(request):return HttpResponse("Hello world")
HttpRequest对象,比如上面代码里的request变量,会有一些有趣的、你必须让自己熟悉的属性和方法,以便知道能拿它们来做些什么。 在view函数的执行过程中,你可以用这些属性来获取当前request的一些信息(比如,你正在加载这个页面的用户是谁,或者用的是什么浏览器)。
2、URL相关信息
HttpRequest对象包含当前请求URL的一些信息:
在view函数里,要始终用这个属性或方法来得到URL,而不要手动输入。 这会使得代码更加灵活,以便在其它地方重用。 下面是一个简单的例子:
# BAD!
def current_url_view_bad(request):return HttpResponse("Welcome to the page at /current/")# GOOD
def current_url_view_good(request):return HttpResponse("Welcome to the page at %s" % request.path)
3、有关request的其它信息
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() 方法来处理这些“可能不存在的键”:
#遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
#寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
# BAD!
def ua_display_bad(request):ua = request.META['HTTP_USER_AGENT'] # Might raise KeyError!return HttpResponse("Your browser is %s" % ua)# GOOD (VERSION 1)
def ua_display_good1(request):try:ua = request.META['HTTP_USER_AGENT']except KeyError:ua = 'unknown'return HttpResponse("Your browser is %s" % ua)# GOOD (VERSION 2)
def ua_display_good2(request):ua = request.META.get('HTTP_USER_AGENT', 'unknown')return HttpResponse("Your browser is %s" % ua)
我们鼓励你动手写一个简单的view函数来显示 request.META 的所有数据,这样你就知道里面有什么了。 这个view函数可能是这样的:
ef display_meta(request):values = request.META.items()values.sort()html = []for k, v in values:html.append('<tr><td>%s</td><td>%s</td></tr>' % (k, v))return HttpResponse('<table>%s</table>' % '\n'.join(html))
详解Django中Request对象的相关用法相关推荐
- python join_详解Python中的join()函数的用法
函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符) ...
- python scatter参数详解_Python 中 scatter 函数参数及用法详解
Python 中 scatter 函数参数及用法详解 Python 中 scatter 函数参数及用法详解 这里有新鲜出炉的 Python 教程, 程序狗速度看过来! Python 编程语言 Pyth ...
- django中request对象的属性和方法
1. Request对象方法和属性 request.method:获取请求方法 request.GET or request.POST:获取GET or POST请求参数,字典形式. request. ...
- python循环语句-详解Python中的循环语句的用法
一.简介 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性.须重要理解,if.while.for以及与它们相搭配的 else. elif.break.continue和pass语句 ...
- python的for语句-详解Python中的循环语句的用法
一.简介 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性.须重要理解,if.while.for以及与它们相搭配的 else. elif.break.continue和pass语句 ...
- python scatter参数详解_Python中scatter函数参数及用法详解
最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...
- python语句join_详解Python中的join()函数的用法
原博文 2017-08-07 20:51 − 函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字 ...
- python:Flask中request对象的简单用法
因为在工作中需要将写好的Python程序改写成API接口供其他部门使用,所以这篇博客重点利用Flask的请求对象完成数据传输,对于更深层次的理论方面的内容,以后再补充: 本文只涉及本地服务器,再远程服 ...
- 详解Python中的join()函数的用法(字符串和os.path)
函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔 ...
最新文章
- 硬盘显示容量和实际容量不符合_为啥我买的64G U盘实际只有57G?聊聊存储市场的“不足量”现象...
- DLL延迟加载工程分析
- 统计一个字符串中的单词数
- 屈原坐上神十带来了iOS 7
- HDU - 4757 Tree(LCA+可持久化trie树)
- 电脑怎么结束进程_深刻了解windows系统的任务管理器,电脑高手的成长之路
- 王坚博士与计算机关系,与王坚副院长面对面:向王坚提问
- tolua打包Android后路径出错,unity+tolua 64位android崩溃排查过程记录
- 基于centos6.5 hbase 集群搭建
- Redis面试常问3 如何实现分布式锁 记住Redis的原子性
- android studio读写txt,Android Studio从.txt文件读取/写入,保存路径?
- 区块链 - 知识点整理
- Java单例模式(饿汉式)
- 职称评审需要满足的条件
- 云服务器被攻击了怎么办
- 教你分清敏感度和特异度
- Canvas 炫彩小球
- 基于卷积神经网络和小波变换的视频监控中的火灾探测
- cocos2d_lua 2.5D
- Python的电子邮件操作
热门文章
- linux编译安装memcached
- 常见排序算法:希尔排序
- Boost 库中的实用工具类使用入门
- Android手机内存图片读取,有效解决Android加载大图片内存溢出的问题
- java jdk 1.8 配置_java_Day01: java的jdk环境变量配置(1.8)
- unity 继承会调用start吗_Unity 继承MonoBehaviour脚本 执行顺序 详解
- 【整理】如何翻译SAP事务代码描述
- 什么是量子计算-超级简单的给你个解释
- Top 10 Things I Know for Sure-深信不疑的十大哲理
- 你羡慕的「自由职业者」,都在焦虑没有保障的退休生活