Подтвердить что ты не робот

Разница между cleaned_data и cleaned_data.get в Django

Я видел несколько примеров таких кодов, как:

    def clean_message(self):
    message = self.cleaned_data['message']
    num_words = len(message.split())
    if num_words < 4:
        raise forms.ValidationError("Not enough words!")
    return message

и некоторые примеры, например:

def clean(self):
    username = self.cleaned_data.get('username')
    password = self.cleaned_data.get('password')
    ...
    self.check_for_test_cookie()
    return self.cleaned_data

В чем разница между ними?

4b9b3361

Ответ 1

.get() в основном является ярлыком для получения элемента из словарь. Обычно я использую .get(), когда я не уверен, что там будет запись в словаре. Например:

>>> cleaned_data = {'username': "bob", 'password': "secret"}
>>> cleaned_data['username']
'bob'
>>> cleaned_data.get('username')
'bob'
>>> cleaned_data['foo']
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'foo'
>>> cleaned_data.get('foo')  # No exception, just get nothing back.
>>> cleaned_data.get('foo', "Sane Default")
'Sane Default'