Чем отличается `request.data ['param-name']` или `request.data.get ('param-name')` в Django - PullRequest
0 голосов
/ 30 мая 2018

Я пытался получить данные из API

1 request.data['param-name']

вывод -: '9121009000'

2 request.data.get('param-name')

вывод -: '9121009000'

Оба дают одинаковый результат.

Итак, какой из них лучше использовать для получения данных и почему.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Да, они оба дадут вам одинаковые результаты, но их отличает то, как они получают данные для данного ключа.Для этого вам нужно понять, как работают словари в python, давайте определим dict:

>>> kwarg = {'name': 'John'}
>>> kwarg['name']
'John'
>>> kwarg['age']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'age'
>>>
>>> kwarg.get('age', 25)
25

В приведенном выше примере в первом методе должен присутствовать ключ, тогда как во втором случае я могу определить значение по умолчаниюесли ключ не найден.

0 голосов
/ 30 мая 2018

Если вы выполните вызов request.data['key'], то за кулисами Python вызовет функцию __getitem__ для request.data.Мы можем прочитать документацию и увидеть:

QueryDict.__getitem__(key)

Возвращает значение для данного key.Если key имеет более одного значения, возвращается последнее значение. Повышает django.utils.datastructures.MultiValueDictKeyError, если ключ не существует .(Это подкласс стандартного языка Python KeyError, поэтому вы можете использовать KeyError.)

Принимая во внимание, что если вы выполняете функцию request.data.get('key'), it will call the .get (..) `, имы видим в documentantation :

QueryDict.get(key, default=None)

Использует ту же логику, что и __getitem__(), с ловушка для возврата значения по умолчанию , если ключ не существует.

Таким образом, это означает, что если ключ не существует, .get(..) вернет None, если вы это сделали не обеспечивает значение по умолчанию, или оно возвратит заданное значение по умолчанию, если вы запросите с помощью request.data.get('key', somedefault).

Обычно последнее используется, если значение является необязательным, и вы хотите уменьшить значениеколичество кода, чтобы проверить, существует ли ключ.

...