zoukankan      html  css  js  c++  java
  • Django QueryDict

    Django 的 QueryDict 对象是由 request.GET 创建的,请求的所有内容均包含在 QueryDict 当中, QueryDict 可以用来表示 GET 和 POST 的数据
    QueryDict 是 MultiValueDict 的子类,为了处理请求中一个 key 对应多个 value 的情况,如多选框中的字段
    MultiValueDict <- 点击查看

    QueryDict 默认无法修改,可以通过 .copy() 获取可修改的副本
    导入:

    from django.http.request import QueryDict
    

    方法

    __init__

    构造函数:

    def __init__(self, query_string=None, mutable=False, encoding=None)
    

    默认生成的 QueryDict 是无法更改的,需要修改 mutable 参数
    可以通过传入一个字符串来实例化 QueryDict
    示例:

    str_ = 'a=1&a=2&b=1'
    a = QueryDict(str_, encoding='utf-8')
    print(a)
    

    输出结果:

    <QueryDict: {'a': ['1', '2'], 'b': ['1']}>
    

    fromkeys

    fromkeys 可以通过一个可迭代对象创建 QueryDict 对象,他会将可迭代对象中的内容作为 key,传入指定 value 后调用 appendlist

    def fromkeys(cls, iterable, value='', mutable=False, encoding=None)
    

    示例:

    a = QueryDict.fromkeys(['a', 'b'], 1)
    print(a)
    

    输出结果:

    <QueryDict: {'a': [1], 'b': [1]}>
    

    setlist & appendlist

    setlist 用于设置一个 key 对应的 value 列表,如果 key 已经存在则替换原来的 value 列表,如果不存在则创建新的键值对

    def setlist(self, key, list_)
    

    appendlist 用于向一个 value 列表中增加新的值,如果 key 已经存在则将新值添加到原 value 列表的后面,如果不存在则创建一个空列表后再将新值填入

    def appendlist(self, key, value)
    

    示例:

    str_ = 'a=1&a=2&b=1'
    a = QueryDict(str_, encoding='utf-8', mutable=True)
    print(a)
    a.setlist('a', ['2', '3'])
    print(a)
    a.appendlist('a', '2')
    a.appendlist('c', '2')
    print(a)
    

    输出结果:

    <QueryDict: {'a': ['1', '2'], 'b': ['1']}>
    <QueryDict: {'a': ['2', '3'], 'b': ['1']}>
    <QueryDict: {'a': ['2', '3', '2'], 'b': ['1'], 'c': ['2']}>
    

    setdefault & setlistdefault

    setdefault 和 setlistdefault 都是用来初始化键值对的:如果对应 key 不存在则创建,存在则跳过

    def setdefault(self, key, default=None)
    def setlistdefault(self, key, default_list=None)
    

    setdefault 用于设置一个值,默认为 [None]
    setlistdefault 用于设置一个列表,默认为 []default= 只能设置为可迭代对象,它会被转换为 list 之后(list())用于初始化一个键值对
    示例:

    str_ = 'a=1&a=2&b=1'
    a = QueryDict(str_, encoding='utf-8', mutable=True)
    a.setdefault('b', '123')
    a.setdefault('c')
    a.setlistdefault('d', '123')
    a.setlistdefault('e', {'a': '1', 'b': '2'})
    print(a)
    

    输出结果:

    <QueryDict: {'a': ['1', '2'], 'b': ['1'], 'c': [None], 'd': ['1', '2', '3'], 'e': ['a', 'b']}>
    

    pop & popitem

    pop 和 popitem 都会从字典中取出一个键值对并删除

    def pop(self, key, *args)
    def popitem(self)
    

    pop 可以指定删除键值对的 key,如果没有找到对应的 key 会报错,除非传入一个默认返回值
    popitem 不能指定要删除键值对的 key,删除的是最后一个加入的键值对,如果字典为空会报错
    示例:

    str_ = 'a=1&a=2&b=1&c=1&d=1'
    a = QueryDict(str_, encoding='utf-8', mutable=True)
    a.pop('a')
    print(a)
    print(a.pop('f', 'cannot find the key'))
    print(a.popitem())
    print(a)
    

    输出结果:

    <QueryDict: {'a': ['1', '2'], 'b': ['1'], 'c': ['1'], 'd': ['1']}>
    cannot find the key
    ('d', ['1'])
    <QueryDict: {'b': ['1'], 'c': ['1']}>
    

    clear

    clear 会清空字典中的所有内容

    urlencode

    通过 urlencode 可以将 QueryDict 转换成 url 字符串
    示例:

    str_ = 'a=a&b=b/'
    a = QueryDict(str_, encoding='utf-8', mutable=True)
    print(a)
    print(a.urlencode())
    print(a.urlencode(safe='/'))
    

    输出结果:

    <QueryDict: {'a': ['a'], 'b': ['b/']}>
    a=a&b=b%2F <class 'str'>
    a=a&b=b/
    
  • 相关阅读:
    [CF707D]Persistent Bookcase_主席树_bitset
    [CF798D]Mike and distribution_贪心
    [LuoguP2164][SHOI2007]交通网络_拓扑排序_概率期望
    [LuoguP3064][USACO12DEC]伊斯坦布尔的帮派Gangs of Istanbull(加强版)_线段树_贪心
    [CF306C]White, Black and White Again_排列组合
    [LuoguP2167][SDOI2009]Bill的挑战_容斥原理/状压dp
    [LuoguP2163][SHOI2007]园丁的烦恼_CDQ分治
    正则字符串插入字符
    [react]
    react 预览pdf 转换
  • 原文地址:https://www.cnblogs.com/dbf-/p/13530788.html
Copyright © 2011-2022 走看看