

QueryDict.
__init__(query_string=None, mutable=False, encoding=None)
query_string에 기반으로 만들어진다=으로 구분이 된다👇 예시
URL
127.0.0.1:8000/?sort=123&filters=23&sort=53
request.GET
<QueryDict: {'sort': ['123', '53']}, {'filters':['23']>
만약에 Query parameter에 string이 없으면 빈 객체로 전달이 된다
dir(QueryDict)
__class__,__class_getitem__,__contains__,__copy__,__deepcopy__,__delattr__,__delitem__,__dict__,__dir__,__doc__,__eq__,__format__,__ge__,__getattribute__,__getitem__,__getstate__,__gt__,__hash__,__init__,__init_subclass__,__ior__,__iter__,__le__,__len__,__lt__,__module__,__ne__,__new__,__or__,__reduce__,__reduce_ex__,__repr__,__reversed__,__ror__,__setattr__,__setitem__,__setstate__,__sizeof__,__str__,__subclasshook__,__weakref__,_assert_mutable,_encoding,_getlist,_mutable,appendlist,clear,copy,dict,encoding,fromkeys,get,getlist,items,keys,lists,pop,popitem,setdefault,setlist,setlistdefault,update,urlencode,values
URL
127.0.0.1:8000/?sort=123&filters=23&sort=53
QueryDict.fromkeys(iterable, vlaue=", mutable=False, encoding=None)request.GET.fromkeys(['sort', 'filters'], value='hello')
>>><QueryDict: {'sort': ['hello'], 'filters': ['hello']}>
QueryDict.__getitem__(key)__getitem__()은 리스트의 끝에 값을 돌려준다.django.utils.datastructure.MutivalueDictKeyError 에러가 보여진다. (이러한 예외는 KeyError의 서브클래스이므로, 유심히 보면 KeyError를 포착할 수 있을 것이다.)request.GET.__getitem__('sort')
>>53
QueryDict.__setitem__(key, value)request.GET.__setitem__('sort',53)
>> AttributeError: This QueryDict instance is immutable
QueryDict.get(key, default = None)__getitem__()와 같은 로직이지만 키에 대응하는 값이 없을 때 기본값을 돌려주는 후크가 있다. request.GET.get('sort')
>> 53
QueryDict.items()dict.items()메소드와 같지만, __getitem()__와 같이 마지막 값을 돌려주는 로직을 사용한다.QueryDict.update(other_dict)q = q = QueryDict('a=1', mutable=True)
q.update({'a': '2'}) >>> q.getlist('a') ['1', '2']
q['a']
>> '2'
QueryDict.copy()copy.deepcopy()를 사용하여 객체의 복제를 생성하여 리턴한다. 복제는 변경가능하므로 값을 변경할 수 있다.QueryDitct.getlist(key, defalut=None)QueryDict.setlist(key, list_)list_를 대응 시켜준다 (__setitem__()과 다르다).QueryDict.appendlist(key, item)QueryDict.setlistdefault(key, default_list=None)QueryDict.lists()q = QueryDict('a=1&a=2&a=3')
q.lists()
>>[('a', ['1', '2', '3'])]
QueryDict.pop(key)q = QueryDict('a=1&a=2&a=3', mutable=True)
q.pop('a')
>> ['1', '2', '3']
QueryDict.popitem()q = QueryDict('a=1&a=2&a=3', mutable=True)
q.popitem()
>>('a', ['1', '2', '3'])
QueryDict.dict()QueryDict.urlencode(safe=None)q = QueryDict('a=2&b=3&b=5')
q.urlencode()
>> 'a=2&b=3&b=5'
safe에 encoding에 포함시키지 않을 문자를 지정할 수 있다.
q = QueryDict(mutable=True)
q['next'] = '/a&b/'
q.urlencode(safe='/') '
>> next=/a%26b/'
from django.http.request import QueryDict
class MyQueryDict(QueryDict):
def __init__(self, query_string=None, mutable=True, encoding=None):
super(MyQueryDict, self).__init__(query_string=query_string,
mutable=mutable,
encoding=encoding)
super()를 이용해 자식 클래스가 부모의 클래스의 __init__를 사용
👇 URL Encoded Characters
backspace %08
tab %09
linefeed %0A
creturn %0D
space %20
! %21
" %22
# %23
$ %24
% %25
& %26
' %27
( %28
) %29
* %2A
+ %2B
, %2C
- %2D
. %2E
/ %2F
: %3A
; %3B
< %3C
= %3D
> %3E
? %3F
@ %40
[ %5B
\ %5C
] %5D
^ %5E
_ %5F
` %60
{ %7B
| %7C
} %7D
REST(Representational state transfer)
REST 아키텍쳐(규칙, 셜계도)를 기반으로 이루어진 어플리케이션 인터페이스이다

👇 URI 구조

https://127.0.0.1:5000/product/table-lamps/?sort=123&filters=1234

request
GET /user/{user_id}/profille/구분자를 통하여 계층관계를 나타낸다