104. HttpRequest对象详解
WSGIRequest 对象常用的属性和方法:
WSGIRequest对象常用的属性:
WSGIRequest对象大部分属性都是只读的,因为这些属性是从客户端上传上来的,没必要做任何的修改。以下对一些常用的属性进行解释:
1.path: 请求服务器的完整“路径”,但不包含域名和参数。比如http://www.baidu.com/xxx/yyy/, 那么path就是/xxx/yyy/。
2.method: 代表的是当前请求的http方法,比如是GET还是POST。
3. GET: 一个django.http.request.QueryDict 对象。操作起来类似于字典。这个属性中包含了所有以?xxx=xxx的方式上传上来的参数。包含了所有的查询字符串。
4.POST:也是一个django.http.request.QueryDict对象。这个属性中包含了所有以POST方式上传上来的参数。
5.FILES:也是一个django.http.request.QueryDict对象。这个属性中包含了所有以POST方式上传上来的参数。
6.COOKIES:一个标准的Python字典,包含所有的cookie,键值对都是字符串类型。
7.sessions:一个类似于字典的对象。用来操作服务器的session。
8.META:存储的客户端发送上来的所有header信息。
1.CONTENT_LENGTH:请求的正文的长度(是一个字符串)。
2.CONTENT_TYPE:请求的正文的MIME类型。
3.HTTP_ACCEPT:响应可接收的Content-Type。
4.HTTP_ACCEPT_ENCODING:响应可接收的编码。
5.HTTP_ACCEPT_LANGUAGE:响应可接收的语言。
6.HTTP_HOST:客户端发送的HOST值。
7.HTTP_REFERER:在访问这个页面上一个页面的url。
8.QUERY_STRING: 单个字符串形式的查询字符串(未解析过的形式)。
9.REMOTE_ADDR:客户端的IP地址。如果服务器使用了nginx做反向代理或者是负载均衡,那么这个值返回的是127.0.0.1,这时候可以使用HTTP_X_FORWAROED_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对象常用方法:
1.is_secure():是否是采用https协议。
2.is_ajax():是否采用ajax发送的请求。原理就是判断请求头中是否存在X-Requested-With:XMLHttpRequest。
print(request.is_ajax())
# False 通过判断请求的头中是否存在,X-Responsed-With=XMLHttpRequest =>True
3.get_host():服务器的域名。如果在访问的时候还有端口号,那么就会加上端口号。比如:www.baidu.com:9000。
4.get_full_path():返回完整的path。如果有查询字符串,还会加上查询字符串,比如/book/?username=guyan。
5.get_raw_uri():获取请求的完整url。
QueryDict对象:
我们平时用的request.GET对象和request.POST都是QueryDict对象,这个对象继承dict,因此用法跟dict相差无几。其中用的比较多的是get方法和getlist方法。
1.get方法:用来获取指定的key值,如果没有这个key,那么会返回None。
2.getlist方法:如果浏览器上传来的key对应的值有多个,那么就需要通过这个方法获取。
如果客户端发送的是GET请求,就返回添加用户信息的页面;如果客户端发送的是POST请求,就将客户端发送的信息进行保存到数据库中。示例代码如下:
def add(request):
== # 如果客户端发送的是get请求,就返回一个添加用户的页面;
# 如果客户端发送的是POST请求,就将客户端发送的信息进行保存到数据库中==
if request.method == 'GET':
return render(request, 'book/static/add.html')
else:
title = request.POST.get('title')
content = request.POST.get('content')
teconologies = request.POST.getlist('teconologies')
print(teconologies)
users = User.objects.create(title=title, content=content, teconologies=teconologies)
return HttpResponse('add 成功')
其中add.html的示例代码如下:
<form action="{% url 'add' %}" method="post">
<table>
<tbody>
<tr>
<td>作者</td>
<td><input type="text" name="title" ></td>
</tr>
<tr>
<td>内容</td>
<td><input type="text" name="content"></td>
</tr>
<tr>
<td>擅长技术:</td>
<td>Python<input type="checkbox" name="teconologies"></td>
<td>Django<input type="checkbox" name="teconologies"></td>
</tr>
<tr><td><input type="submit" value="提交"></td></tr>
</tbody>
</table>
</form>
104. HttpRequest对象详解的更多相关文章
- Django HttpRequest对象详解
WSGIRequest对象 Django在接收到http请求之后,会根据http请求携带的参数以及报文信息创建一个WSGIRequest对象,并且作为视图函数第一个参数传给视图函数.也就是我们经常看到 ...
- JS中的event 对象详解
JS中的event 对象详解 JS的event对象 Event属性和方法:1. type:事件的类型,如onlick中的click:2. srcElement/target:事件源,就是发生事件的 ...
- django中request对象详解(转载)
django中的request对象详解 Request 我们知道当URLconf文件匹配到用户输入的路径后,会调用对应的view函数,并将 HttpRequest对象 作为第一个参数传入该函数. ...
- jQuery的deferred对象详解
jQuery的deferred对象详解请猛击下面的链接 http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_ ...
- Window 对象详解 转自 http://blog.csdn.net/jcx5083761/article/details/41243697
详解HTML中的window对象和document对象 标签: HTMLwindowdocument 2014-11-18 11:03 5884人阅读 评论(0) 收藏 举报 分类: HTML& ...
- jQuery的deferred对象详解(转载)
本文转载自: jQuery的deferred对象详解(转载)
- mvc-servlet---ServletConfig与ServletContext对象详解(转载)
ServletConfig与ServletContext对象详解 一.ServletConfig对象 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为s ...
- JavaWeb学习----JSP内置对象详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- (转)javascript中event对象详解
原文:http://jiajiale.iteye.com/blog/195906 javascript中event对象详解 博客分类: javaScript JavaScriptCS ...
随机推荐
- HihoCoder第七周:完全背包问题
1043 : 完全背包 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 且说之前的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时 ...
- Spark tungsten 项目阅读笔记
Spark tungsten 项目阅读笔记 Spark tungsten 项目的宣言就是:Bringing Apache Spark closer Bare Metal. 我的理解就是不要让硬件成为S ...
- Sublime和Python中文编码的一些问题
Windows下的控制台中,应该是这样的逻辑: 1.如果是Unicode字符串的话,首先根据控制台编码进行转换 2.之后进行输出 所以在Windows控制台下,假设str = u'中文', 1.直接p ...
- 这26个为什么,让初学者理解Python更简单!
为什么Python使用缩进来分组语句? 为什么简单的算术运算得到奇怪的结果? 为什么浮点计算不准确? 为什么Python字符串是不可变的? 为什么必须在方法定义和调用中显式使用“self”? 为什么不 ...
- 九十四、SAP中ALV事件之八,显示功能按钮栏
一.我们把其他代码都注释掉,直接写一行调用 SET PF-STATUS 'TIANPAN_TOOLS'. 二.运行程序,会看到我们上一篇所添加的相关功能栏图标, 三.点击不同图标,会按程序代码,有不同 ...
- 二十六、SAP中通过FORMAT COLOR来设置文字背景颜色
一.代码如下 二.效果如下
- Angular 学习1
AngularJS 表达式 AngularJS 使用 表达式 把数据绑定到 HTML. AngularJS 表达式 AngularJS 表达式 很像 JavaScript 表达式:它们可以包含文字.运 ...
- mysql第六篇 : MySQL索引原理与慢查询优化
浏览目录 一.索引介绍 二.索引方法 三.索引类型 四.聚合索引和辅助索引 五.测试索引 六.正确使用索引 七.组合索引 八.注意事项 九.查询计划 十.慢日志查询 十一.大数据量分页优化 一.索引介 ...
- python基础(二)抽象
1 函数与模块 编程大师Martin Fowler先生曾经说过:"代码有很多种坏味道,重复是最坏的一种!" 函数 为了减少代码中重复出现的冗余代码,通常我们选择创建函数来供代码重复 ...
- 洛谷P1433 吃奶酪 题解 状态压缩DP
题目链接:https://www.luogu.com.cn/problem/P1433 题目大意 房间里放着 \(n\) 块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 \((0, ...