devops——3、接收并处理请求参数与QueryDict对象

本文详细解析了Django框架中处理GET、POST、DELETE请求的方法,介绍了如何通过QueryDict对象处理参数,包括直接获取、获取列表、修改和实例化等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、GET请求

dashboard/views.py
from django.http import HttpResponse

def index(request):
    print("request get =", request.GET)
    print("aa=", request.GET.get("aa"))
    print("cc=", request.GET.getlist("cc"))
    return HttpResponse("")

访问http://127.0.0.1:8000/dashboard/?aa=bb&cc=dd&cc=ee返回结果如下:

request get = <QueryDict: {'aa': ['bb'], 'cc': ['dd', 'ee']}>
aa= bb
cc= ['dd', 'ee']
[12/Dec/2018 02:41:55] "GET /dashboard/?aa=bb&cc=dd&cc=ee HTTP/1.1" 200 0

2、POST请求

dashboard/views.py
from django.http import HttpResponse

def index(request):
    if request.method == "GET":
        print("request get =", request.GET)
        print("aa=", request.GET.get("aa"))
        print("cc=", request.GET.getlist("cc"))
    elif request.method == "POST":
        print("request post =", request.POST)
    return HttpResponse("")

devops/settings.py注释掉MIDDLEWARE中的django.middleware.csrf.CsrfViewMiddleware
否则POST请求时会出现403报错
下面进行POST提交测试:

In [1]: import requests                                                                         
In [2]: url = "http://127.0.0.1:8000/dashboard/?aa=bb&cc=dd&cc=ee"                              
In [3]: requests.get(url)                                                                       
Out[3]: <Response [200]>
In [4]: data = {}                                                                               
In [5]: data["aa"] = "bb"                                                                       
In [6]: data["cc"] = ["dd", "ee"]                                                               

In [7]: data                                                                                    
Out[7]: {'aa': 'bb', 'cc': ['dd', 'ee']}

In [8]: requests.post(url, data)                                                               
Out[8]: <Response [403]>  #未修改settings.py出现403报错

In [9]: requests.post(url, data)                                                               
Out[9]: <Response [200]> #修改settings.py正常了

返回结果如下:

request post = <QueryDict: {'aa': ['bb'], 'cc': ['dd', 'ee']}>
[12/Dec/2018 02:56:38] "POST /dashboard/?aa=bb&cc=dd&cc=ee HTTP/1.1" 200 0

3、QueryDict对象

在HttpRequest对象中,GET和POST属性是django.http.QueryDict的实例,它是一个自定义的类似字典的类,用来处理同一个键带有多个值。这个类的需求来自某些HTML表单元素传递多个值给同一个键.
request.POST和request.GET的QueryDict在一个正常的请求/响应循环中是不可变的。若要获得可变的版本,需要使用.copy().
https://docs.djangoproject.com/en/1.11/ref/request-response/#querydict-objects

例如:如果给request.POST和request.GET的QueryDict直接赋值会出现报错:AttributeError: This QueryDict instance is immutable,需要使用request.GET.copy()

dashboard/views.py
from django.http import HttpResponse

def index(request):
    if request.method == "GET":
        print("request get =", request.GET)
        data = request.GET.copy()
        data["aa"] = "x"
        print("data=", data)
        print("aa=", request.GET.get("aa"))
        print("cc=", request.GET.getlist("cc"))
    elif request.method == "POST":
        print("request post =", request.POST)
    return HttpResponse("")

结果如下:

request get = <QueryDict: {'aa': ['bb'], 'cc': ['dd', 'ee']}>
data= <QueryDict: {'aa': ['x'], 'cc': ['dd', 'ee']}>
aa= bb
cc= ['dd', 'ee']
[12/Dec/2018 05:58:31] "GET /dashboard/?aa=bb&cc=dd&cc=ee HTTP/1.1" 200 0

实例化QueryDict

In [1]: from django.http import QueryDict                                                   
In [2]: QueryDict('a=1&a=2&c=3')                                                            
Out[2]: <QueryDict: {'a': ['1', '2'], 'c': ['3']}>
In [3]: q = QueryDict('a=1&a=2&c=3')                                                        
In [4]: QueryDict.fromkeys(['a', 'a', 'b'], value='val')                                    
Out[4]: <QueryDict: {'a': ['val', 'val'], 'b': ['val']}>
In [5]: q.dict()                                                                            
Out[5]: {'a': '2', 'c': '3'}
In [6]: q.urlencode()                                                                       
Out[6]: 'a=1&a=2&c=3'

QueryDict对象–方法

QueryDict.get(key, default=None)
QueryDict.setdefault(key, default=None)[source]
QueryDict.update(other_dict)
QueryDict.items()
QueryDict.values()
QueryDict.copy()
QueryDict.getlist(key, default=None)
QueryDict.setlist(key, list_)[source]
QueryDict.appendlist(key, item)
QueryDict.setlistdefault(key, default_list=None)
QueryDict.lists()
QueryDict.pop(key) 返回给定键的值列表,并将其从字典中删除
QueryDict.popitem() 删除字典的任意成员(因为没有排序的概念),并返回包含键的两个值元组和键的所有值的列表
QueryDict.dict()
QueryDict.urlencode(safe=None) 以查询字符串格式返回数据的字符串

4、DELETE请求

In [25]: requests.delete(url, data=data)                                                    
Out[25]: <Response [200]>

dashboard/views.py
from django.http import HttpResponse,QueryDict
def index(request):
    if request.method == "GET":
        print("request get =", request.GET)
        data = request.GET.copy()
        data["aa"] = "x"
        print("data=", data)
        print("aa=", request.GET.get("aa"))
        print("cc=", request.GET.getlist("cc"))
    elif request.method == "POST":
        print("request post =", request.POST)
    elif request.method == "DELETE":
        print("request delete =", QueryDict(request.body))
    return HttpResponse("")

返回结果:

request delete = <QueryDict: {'aa': ['bb'], 'cc': ['dd', 'ee']}>
[12/Dec/2018 07:19:16] "DELETE /dashboard/?aa=bb&cc=dd&cc=ee HTTP/1.1" 200 0
百度空间介绍地址:http://hi.baidu.com/oidzvauroqehjmr/item/5a5b247f3c188646ef1e53e0 展示网站:卓流应用网:http://360cd.cn 百度网盘源码下载地址:http://pan.baidu.com/s/1b1dq0 pan.baidu.com/s/1b1dq0 所有模块现在全部免费发布,但不保证因为一些其他原因而出现的无法安装,可以免费在线询问我们的QQ: 1356231055 或者加QQ群免费咨询:47101787 部分功能展示如下:   1.所有功能全部以插件和模块开发,原生系统无任何影响   2.统一支付以模块的方式开发,可以独立设定系统相同的或更多的支付方式。   3.系统平行的支付方式不影响原系统平滑升级。   4.独立的支付系统,原系统无任何关联,可以作为独立的支付接口   5.建立卓支付(忆付宝)以实现余额支付。   6.非会员用户支付,充值界面跳转   7.会员用户支付,可直接输入密码,用商城余额支付   8.系统支付方式完全绑定   9.可在线充值,查询充值记录,提现申请,提现记录及余额转账   10.账户设置,可手动添加一些常规的支付方式,提供修改支付密码功能   11.可查看财务明细    更多模块:     1.统一支付 2.余额支付,站内虚拟资金、虚拟积分、在线充值、密保、充值卡等 3.商家手机短信插件(需要短信接口) 4.店铺地图功能 5.积分购物,购物获得积分,也可积分和RMB合支付。积分抵扣 6.注册会员推广奖励积分功能 7.积分商城(积分兑换) 8.flash幸运大转盘积分抽奖功能 9.店铺寻蛋砸蛋活动功能 10.商城砸蛋功能 11.敏感词过滤插件功能 12.手机验证绑定功能 13.动态购物车功能(具有商品飞入购物车动画效果,且购物车内可显示商品信息) 14.店铺加入商品销售排行和收藏排行 15.店铺加入幻灯片功能(商家可以在管理页面自己设置添加) 16.超市数据库功能(管理员可以整理一批商品放到一个超市数据库里,商家可以把超市数据库里面的商品导入到自己的店铺,省去自己一个一个上传添加商品的麻烦) 17.店铺打烊功能 18.ecmall qq 新浪 支付宝一键登录 19.ecmall后台管理员任意登录会员账号模块 20.求购信息发布插件 21.积分系统:整合了 余额支付,站内虚拟资金、虚拟积分、在线充值、密保、充值卡+邀请好友注册获得积分+积分抵扣+积分商城+大转盘积分抽奖+店铺砸蛋获金币+商城砸蛋活动功能等 22.ecmall秒杀插件 23.ecmall团购插件(类似聚划算) 24.淘宝助理批量导出导入 25.店铺自定义挂件自由拖拽编辑系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值