django请求

一、request对象常用属性

  • request对象: HttpRequest 类型的实例
AttributeDescription
path请求页面的全路径,不包括域名端口参数。例如: /users/index
method一个全大写的字符串,表示请求中使用的HTTP方法,常用值:GET, POSTDELETEPUT等。以下三种为 GET 请求:
  • form 表单默认提交(或者method指定为get)
  • 在浏览器中输入地址直接请求
  • 网页中的超链接(a标签)
user
  • 已登录:AbstractUser对象;
  • 未登录:AnonymousUser对象;
    判断是否已经登录: request.user.is_authenticated(),返回true表示已经登录
GET类似字典的 QueryDict 对象,包含url中所有的查询字符串参数
POST类似字典的 QueryDict 对象,包含 POST 请求的所有键值对参数(表单数据)
body获取原始的请求体数据,获取到的数据为bytes类型
FILES一个类似于字典的对象,包含所有的上传文件
METApython 字典类型,封装了请求头headers中的数据
REMOTE_ADDR – 客户端的IP地址 
REQUEST_METHOD — 一个字符串,例如"GET" 或"POST
CONTENT_TYPE – 请求的正文的MIME 类型
注意:对于用户添加到请求头中的键值,Django会给键加上前缀 HTTP_再转换成大写,再把键值保存到request.META中 
COOKIES一个标准的 python 字典,包含所有的 cookies, 键和值都是字符串
session可读可写的类似字典的对象: django.contrib.sessions.backends.db.SessionStore
Django 提供了 session 模块,默认就会开启用来保存 session 数据

二、QueryDict对象(python字典不同:QueryDict对象一个键可以保存多个值,单个get获取,多个getlist获取)

三、客户端传递请求参数的几种方式

1、通过 URL路径(path)传递,例如:http://127.0.0.1:8000/news/1/2,两个参数:新闻类别id 和 页码 
2、通过 query string 查询字符串传递
      例如:http://127.0.0.1:8000/news?category=1&page=2
3、通过 body 请求体传递,又可根据传递的数据格式,分为:

      3.1、表单数据
      3.2、非表单数据(json, xml)

四、获取请求参数

  1. 获取查询字符串
    查询字符串的获取通过 request.GET 属性,
    需求: 获取URL地址 http://127.0.0.1:8000/news2?category=1&page=2 中的查询字符串的值

    # url配置
    url(r'^news2$', views.news2),

    # 视图函数
    def news2(request):
        category = request.GET.get('category')
        page = request.GET.get('page')

        # ?category=1&page=2&a=3&a=4
        # a = request.GET.getlist('a')  # 一键多值通过 getlist 获取

        text = '获取查询字符串:<br/> category=%s, page=%s' % (category, page)
        return HttpResponse(text)
    注意:查询字符串的获取与请求方式无关:不管是 GET 还是 POST请求,都可以通过request.GET 属性来获取

  2. 获取请求体数据
    可以发送请求体数据的请求方式有POST、PUT、PATCH、DELETE。
    请求体数据格式不固定,可以是:表单类型数据,可以是非表单数据,如:JSON,xml等,获取请求体数据时,应区分对          待。

    2.1 获取表单数据 Form Data
      request.POST:获取post请求中的表单类型的数据
      # url配置
      url(r'^news3$', views.news3),

      # 视图函数
      def news3(request):
          category = request.POST.get('category')
          page = request.POST.get('page')

           # 一键多值通过从POST中用 getlist 获取
          # ?category=1&page=2&a=3&a=4
          # a = request.POST.getlist('a') 

          text = '获取body中的键值对:<br/> category=%s, page=%s' % (category, page)
          return HttpResponse(text)
      注意:request.POST 只能用来获取POST方式的请求体表单数据。

    2.2 非表单类型 Non-Form Data
      request.body属性:获取非表单类型的请求体数据,如:JSON、XML等,获取到的数据类型为bytes类型
      获取数据后,自己解析数据取出参数
      例如:获取请求体中的json数据: {"category": 1, "page": 2}

      # url配置
      url(r'^news4$', views.news4),

      import json
      def news4(request):
          # 获取json字符串
          json_str = request.body
          json_str = json_str.decode()  # python3.6 无需执行此步

          # 解析json
          dict_data = json.loads(json_str)
          category = dict_data.get('category')
          page = dict_data.get('page')

          text = '获取body中的json数据: category=%s, page=%s' % (category, page)
          return HttpResponse(text)
  3. 获取请求头数据
    可以通过request.META属性获取请求头headers中的数据,request.META为字典类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值