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
/
구분자를 통하여 계층관계를 나타낸다