前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HttpReqeust对象

HttpReqeust对象

作者头像
星哥玩云
发布2022-09-14 17:50:23
1820
发布2022-09-14 17:50:23
举报
文章被收录于专栏:开源部署

一、作用

客户端给服务器传递数据所用

二、概述

  • 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象
  • 视图函数的第一个参数是HttpRequest对象
  • HttpRequest对象中保存了客户端传递的数据

三、属性

path 请求的完整路径,不包含域名和端口

method 请求方式,常用的get和post

encoding 提交数据的编码格式

值:如果为None,表示使用浏览器默认的编码格式,一般为utf-8

GET 一个类似字典的对象,包含get请求方式的所有参数

POST 一个类似字典的对象,包含post请求方式的所有参数

如果表单提交失败 查看是否存在{% csrf_token %} 或者将Middleware中的csrf关闭

FILES 一个类似字典的对象,包含所有的上传文件

COOKIES 是一个标准的字典,包含了所有的cookie

session 一个类似字典的对象,表示当前会话信息,只有Django开启session服务后才会有该属性,默认是开启的

META 包含了http请求的所有header头信息

格式化后显示

代码语言:javascript
复制
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">requestAttr</span><span class="hljs-params">(request)</span>:</span>
    values = request.META.items()
    html = []
    <span class="hljs-keyword">for</span> k,v <span class="hljs-keyword">in</span> values:
        html.append(<span class="hljs-string">'&lt;tr&gt;&lt;td&gt;{}&lt;/td&gt;&lt;td&gt;{}&lt;/td&gt;&lt;/tr&gt;'</span>.format(k,v))
    <span class="hljs-comment"># return HttpResponse('request属性')</span>
    <span class="hljs-keyword">return</span> HttpResponse(<span class="hljs-string">'&lt;table&gt;%s&lt;/table&gt;'</span>%<span class="hljs-string">'\n'</span>.join(html))

常用的key值

  • REMOTE_ADDR 客户端IP地址
  • HTTP_USER_AGENT 浏览器和系统的信息的字符串
  • HTTP_REFERER 获取从哪里点击过啦的链接地址

示例

代码语言:javascript
复制
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">index</span><span class="hljs-params">(request)</span>:</span>
    <span class="hljs-comment">#分析客户想干什么(客户给服务的数据)</span>
    print(request.path)
    print(request.method)
    print(request.encoding)
    print(request.GET)
    print(request.POST)
    print(request.FILES)
    print(request.COOKIES)
    print(request.session)
    <span class="hljs-keyword">return</span> HttpResponse(<span class="hljs-string">"lucky is a good man"</span>)

四、方法

  • get_full_path() 获取完整的请求(不包括域名和端口)
  • get_host() 获取主机和端口
  • is_ajax() 判断是否为ajax请求

五、QueryDict对象

  • 说明 类似字典的对象,与字典的区别是可以有相同的键,request对象中的GET、POST属性都是QueryDict类型的对象
  • 方法
    • get() 作用:根据键获取值 注意
      • 只能获取键的一个值
      • 如果有多个相同的键,则获取最后一个值
    • getlist() request.GET.getlist(‘key’) 作用:根据键返回多个值的列表

六、GET属性

格式

request.GET

URL地址为

http://127.0.0.1:8000/lucky/?a=1&b=2&c=3

示例

代码语言:javascript
复制
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get1</span><span class="hljs-params">(request)</span>:</span>
    <span class="hljs-keyword">if</span> request.method == <span class="hljs-string">"GET"</span>:
        <span class="hljs-comment">#获取客户端传递的数据</span>
        a = request.GET.get(<span class="hljs-string">"a"</span>)
        b = request.GET.get(<span class="hljs-string">"b"</span>)
        c = request.GET.get(<span class="hljs-string">"c"</span>)
        <span class="hljs-keyword">return</span> HttpResponse(a+b+c)

URL地址为

http://127.0.0.1:8000/lucky/?a=1&a=2&c=3

示例

代码语言:javascript
复制
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get2</span><span class="hljs-params">(request)</span>:</span>
    <span class="hljs-keyword">if</span> request.method == <span class="hljs-string">"GET"</span>:
        alist = request.GET.getlist(<span class="hljs-string">"a"</span>)
        c = request.GET.get(<span class="hljs-string">"c"</span>)
        <span class="hljs-keyword">return</span> HttpResponse(alist[<span class="hljs-number">0</span>]+alist[<span class="hljs-number">1</span>]+c)

七、POST属性

注册界面 register.html

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
    <form action="/register/" method="post">
        {% csrf_token %}
        账号:<input type="text" name="account"><br/>
        密码:<input type="password" name="password"><br/>
        验证密码:<input type="password" name="yzm"><br/>
        <input type="submit" value="注册">
    </form>
</body>
</html>

路由

代码语言:javascript
复制
re_path(<span class="hljs-string">r'register/'</span>, views.register),

视图

代码语言:javascript
复制
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">register</span><span class="hljs-params">(request)</span>:</span>
    <span class="hljs-keyword">if</span> request.method == <span class="hljs-string">"GET"</span>:
        <span class="hljs-keyword">return</span> render(request, <span class="hljs-string">"App/register.html"</span>)
    <span class="hljs-keyword">else</span>:
        <span class="hljs-comment">#获取客户端传递的数据</span>
        account = request.POST.get(<span class="hljs-string">"account"</span>)
        password = request.POST.get(<span class="hljs-string">"password"</span>)
        yzm = request.POST.getlist(<span class="hljs-string">"yzm"</span>)
        print(account)
        print(password)
        print(yzm)
        <span class="hljs-keyword">return</span> HttpResponse(<span class="hljs-string">"注册成功"</span>)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、作用
  • 二、概述
  • 三、属性
  • 四、方法
  • 五、QueryDict对象
  • 六、GET属性
  • 七、POST属性
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档