Специальная, подарочная акция получения доступа к Django4!
Как, я, начал код писать в Python? Смотрите, если уперлись и ничего не получается.
С учётом того, что мы ранее изучили git + django + vs code. давайте использовать git, для облегчения повседневной работы.
НЕт смысла тренировать формы в нашем основной проекте, что бы не делать кавардак, создадим ветку и там будем тренироваться с формами.
Вот наш план работы с формами.
-
""" https://docs.djangoproject.com/en/4.0/#forms todo: Работа с формами. ? Создать приложение app_form. ? Увидеть из чего состоят формы. ? Понять поля форм. ? Понять виджеты форм. ? Разобраться с API форм: 1. В Jupyter 2. В реальной форме увидеть применение.. ? Разобраться с методами форм в двух ваиантах: 1. В Jupyter 2. В реальной форме увидеть применение. ? Глубже освоить формы из моделей. """
нам нужно подготовить все для нормального, подробного изучения form Django, создадим app и файл для jupyter notebook.
Как вы увидели, я немного тупанул и у нас в основную ветку затесались disscusions и forms_app(это прекрасно), вам необходимо это исправить, что бы больше не повторять. (домашнее задание. Сбросить в группу.
Как вы решили этот вопрос и в чём была причину и решение.
Прежде, чем начать детальное рассмотрение. хорошо бы осознать из чего состоит форма. что она есть, как устроена, что в ней основное.
Давайте поступим так.
Рассмотрим готовую форму, поймём отличия с моделью и разберём важные мелочи, почему в форму передаются именно аргументы (а допустим не называется, как в моделях, настройки полей).
И прогоним исходный код, через jupyter. я вам напомню Питон. что бы понимание уже стало на все 100. Это у нас будет отличный старт в формах - земля появится под ногами.
# """ def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2): pos = pos1 + pos2 p_or_k = 'argu' + pos_or_kwd kwd = kwd1 + kwd2 return pos, p_or_k, kwd """ "\ndef f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):\n pos = pos1 + pos2\n p_or_k = 'argu' + pos_or_kwd\n kwd = kwd1 + kwd2\n return pos, p_or_k, kwd\n " def f(pos1, pos2, /): pos = pos1 + pos2 return pos f(pos1 = 5, pos2=6) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) /tmp/ipykernel_61037/258070995.py in <module> ----> 1 f(pos1 = 5, pos2=6) TypeError: f() got some positional-only arguments passed as keyword arguments: 'pos1, pos2' f(5, 6) 11 def f (pos_or_kwd): var = pos_or_kwd + "ork" return var f('w') 'work' f(pos_or_kwd="w") 'work' def f(*, kwd1, kwd2): kwd = kwd1 + kwd2 return kwd f('wo', 'rk') --------------------------------------------------------------------------- TypeError Traceback (most recent call last) /tmp/ipykernel_61037/442069058.py in <module> ----> 1 f('wo', 'rk') TypeError: f() takes 0 positional arguments but 2 were given f(kwd1='wo', kwd2='rk') 'work'
Откройте этот файл исходного кода django-form.
Откройте сейчас и до урока и посмотрите.
У вас есть ощущение, что это просто код и не понятно ни где начало ни где конец ни на что смотреть и как вообще в этом разобраться?
Как то в одном интервью создатель Линукс Линус сказал такую фразу (он часто на этом акцентирует внимание)
Цитата: -"мне нравятся программисты. которые видят слои кода."
Скорее всего вы не найдёте в Википедии многоуровневую архитектору кода - это немного нет.
Мы сейчас не говорим от том что нужно разделить к примеру бизнес логику и нечто другое.
Мы говорим о чтении кода в конкретном файле и умении выделять слои(архитектуру построения самого кода, как стиля).
Давайте научимся понимать исходный код слоями, что облегчит чтение кода, мы будем понимать с чего начинать читать код в файле, далее легко выстроить и эжу саму архитектуру.
Джанго в этом примере очень крут, он структурирован очень хорошо и очень понятно.
Так же я часто рекомендую смотреть исходный код
https://beeware.org
Вы почувствуете один и тот же почерк кода, да, да потому что Рассел Кейт Магги является ведущим разрабочиком Джанго.
Поэтому давайте учится у этих людей. как выстраивать код, что бы это было профессионально.
Но для начала давайте поймём м чего начать читать код.
Мы с вами сделаем круче, обратите внимание, как за пару минут понять смысл документации просто взглянув на исходный код, то что я объясню, многие не понимают.
на выходе мы должны чётко расставить в голове API.
Это важный момент, API в документации в куче.
Именно программист должен расставить в голове API (если этого не сделать, то мы конечно можем проделать API, но у нас будет постоянное ощущение не до понимания, плавания).
Мы с вами расставим в голове API, при помощи просмотра документации и просмотра исходного кода и нам будет понятно:
что передать как аргументы в поле формы. (из чего то оно состоит это поле тоже хорошо бы понять).
Что применять, как методы в представлении.
Ну и в конце концов домашнее задание. Посмотреть код toga. Вы уловите один и тот же стиль кодирования с него и учитесь.
План я написал, но прежде чем вплотную перейти к формам, подготовим профессиональную почву.
Нам нужно посмотреть на API опять с позиции исходного кода и научится в API различать методы и аргументы, опять же разобраться что где будем применять и дальше мы пройдём по всем пунктам документации собирая до кучи все к API.
filds
def __init__(self, *, required=True, widget=None, label=None, initial=None, help_text='', error_messages=None, show_hidden_initial=False, validators=(), localize=False, disabled=False, label_suffix=None):
form
# argumetns def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=ErrorList, label_suffix=None, empty_permitted=False, field_order=None, use_required_attribute=None, renderer=None):
Проработать документацию.
Создать форму.
Отработать API.
Разделить в голове аргументы и методы:
аргументы в полях использовать. (в полях не забыть про виджеты) методы использовать в представлениях. написать представление для формы (обратить внимание на загрузкук файлов.)
Формы из моделей.
media контент.
Тонкости(настройки) формы из моделей. (это наше основное)
class ContactForm(forms.Form): subject = forms.CharField(max_length=100) message = forms.CharField(widget=forms.Textarea) sender = forms.EmailField() cc_myself = forms.BooleanField(required=False)
Formset - домашнее задание.
< 1 2 3 ... 34 35 36 37 38 ... 59 60 61 >