Django框架(20.Django的视图函数的request参数以及QueryDict对象)

HttpReqeust对象

服务器接收到http协议的请求后,会根据报文创建HttpRequest对象,这个对象不需要我们创建,直接使用服务器构造好的对象就可以。视图的第一个参数必须是HttpRequest对象,在django.http模块中定义了HttpRequest对象的API。

  

视图函数的request参数

     request参数就是一个HttpReuquest对象

1.简单了解POST和GET:

      POST:  提交的参数请求头,  数据安全性要求比较高的时候使用post

      GET:提交的参数在url中

2.request参数:

    使用表单时,注释掉setting.py中的如下代码:

# 'django.middleware.csrf.CsrfViewMiddleware',

    request.POST 保存的是post方式提交的参数

    request.GET 保存的是get方式提交的参数

这两个的类型其实是QueryDict对象  (下面有说)

3.属性      下面除非特别说明,属性都是只读的。

  • path:一个字符串,表示请求的页面的完整路径,不包含域名和参数部分。
  • method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'。
    • 在浏览器中给出地址发出请求采用get方式,如超链接。
    • 在浏览器中点击表单的提交按钮发起请求,如果表单的method设置为post则为post请求。
  • encoding:一个字符串,表示提交的数据的编码方式。
    • 如果为None则表示使用浏览器的默认设置,一般为utf-8。
    • 这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值。
  • GET:QueryDict类型对象,类似于字典,包含get请求方式的所有参数。
  • POST:QueryDict类型对象,类似于字典,包含post请求方式的所有参数。
  • FILES:一个类似于字典的对象,包含所有的上传文件。
  • COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串。
  • session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django 启用会话的支持时才可用,详细内容见"状态保持"。

3.Django中的QueryDict对象

     QueryDict像字典,但又不是字典,它可以一个键可以对应多个值

      定义在django.http.QueryDict

   (1)  生成QueryDict对象       QueryDict(‘键名=值&键名=值&键名=值’)

   (2)  取值1   :   QueryDict对象['键名']         #   这种方式如果没有键名时,会报错

   (3)   取值2:    QueryDict对象.get('键名',默认值)   #  get方法取值时,如果没有键名是不会报错的,是NoneType类型,    或者返回默认值

   (4)   有多个值,取值时    QueryDict对象.getlist('键名')   # 就会把键相同的值放在一个列表中返回  

            如果键不存在则返回空列表[],可以设置默认值进行后续处理

  在项目的shell中进行测试使用

In [7]: from django.http.request import QueryDict

In [8]: q = QueryDict('a=1&b=2&c=3')

In [9]: q['a']
Out[9]: '1'

In [10]: q['q']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
E:\Python3\Python\Python36\lib\site-packages\django\utils\datastructures.py in __getitem__(self, key)
     77         try:
---> 78             list_ = super().__getitem__(key)
     79         except KeyError:

KeyError: 'q'

During handling of the above exception, another exception occurred:

MultiValueDictKeyError                    Traceback (most recent call last)
<ipython-input-10-79654c88deae> in <module>()
----> 1 q['q']

E:\Python3\Python\Python36\lib\site-packages\django\utils\datastructures.py in __getitem__(self, key)
     78             list_ = super().__getitem__(key)
     79         except KeyError:
---> 80             raise MultiValueDictKeyError(key)
     81         try:
     82             return list_[-1]

MultiValueDictKeyError: 'q'

In [11]: q.get('a')
Out[11]: '1'

In [12]: q.get('q')

In [13]: type(q.get('q'))
Out[13]: NoneType

In [14]: q1 = QueryDict('a=1&a=2&a=3')

In [15]: q1.getlist('a')
Out[15]: ['1', '2', '3']

In [16]: 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还是那个同伟伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值