阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

HttpReqeust对象

191次阅读
没有评论

共计 2272 个字符,预计需要花费 6 分钟才能阅读完成。

一、作用

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

二、概述

  • 服务器接收到 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 头信息

    格式化后显示

    def requestAttr(request):
    values = request.META.items()
    html = []
    for k,v in values:
    html.append('<tr><td>{}</td><td>{}</td></tr>'.format(k,v))
    # return HttpResponse('request 属性')
    return HttpResponse('<table>%s</table>'%'\n'.join(html))

    常用的 key 值

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

    def index(request):
    # 分析客户想干什么 (客户给服务的数据)
    print(request.path)
    print(request.method)
    print(request.encoding)
    print(request.GET)
    print(request.POST)
    print(request.FILES)
    print(request.COOKIES)
    print(request.session)
    return HttpResponse("lucky is a good man")

四、方法

  • 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

  • 示例

    def get1(request):
    if request.method == "GET":
    # 获取客户端传递的数据
    a = request.GET.get("a")
    b = request.GET.get("b")
    c = request.GET.get("c")
    return HttpResponse(a+b+c)
  • URL 地址为

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

  • 示例

    def get2(request):
    if request.method == "GET":
    alist = request.GET.getlist("a")
    c = request.GET.get("c")
    return HttpResponse(alist[0]+alist[1]+c)

七、POST 属性

  • 注册界面 register.html

    <!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>
  • 路由

    re_path(r'register/', views.register),
    
  • 视图

    def register(request):
    if request.method == "GET":
    return render(request, "App/register.html")
    else:
    # 获取客户端传递的数据
    account = request.POST.get("account")
    password = request.POST.get("password")
    yzm = request.POST.getlist("yzm")
    print(account)
    print(password)
    print(yzm)
    return HttpResponse("注册成功")

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-05-26发表,共计2272字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中