Анализ дат с использованием WTForms Flask - Python

Привет. Итак, я уже довольно давно использую WTForms с успехом.

Проблема в том, как разбирать даты.

Я всегда назначал переменные в соответствии с данными формы следующим образом

firstname = form.firstname.data

Это сохранит ввод пользователя из данных формы в мою переменную с именем «firstname», которая отлично работает, моя проблема - когда дело доходит до дат.

У меня есть следующий код

Класс WTForms

class BookingForm(Form):
start_date = DateField('Start Date', format='%m/%d/%Y')
end_date = DateField('End Date', format='%m/%d/%Y')

Маршрут бронирования

@app.route('/book/', methods=['GET','POST'])
@login_required
def book():
try:
    form = BookingForm(request.form)

    if request.method == "POST" and form.validate():
        start_date = form.start_date.data
        end_date = form.end_date.data
        # I Have also tried form.start_date.data.strftime('%m-%d-%Y') with no luck
 ...

Шаблон HTML {jinja}

<div class = "col-md-4">
     {{ render_date_field(form.start_date) }}
</div>
<div class = "col-md-4">
     {{ render_date_field(form.end_date) }}
</div>

Я также использую datetime в python

from datetime import datetime

Я безуспешно пытался следовать многим документам о том, как преобразовать дату в переменную из формы ввода пользователя, кто-нибудь знает правильный синтаксис?

Спасибо

Указанный формат даты должен применяться при заполнении формы в браузере. Ваш формат даты - % m /% d /% Y. Пример даты начала в этом формате: 06.10.2018. wtf анализирует это как 2018-10-06 и сохраняет в form.start_date.data.

Oluwafemi Sule 06.10.2018 21:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
4 761
1

Ответы 1

form.date_created.data возвращает объект datetime.date.

Атрибуты month, day и year хранят эти значения как целые числа. Для решения этой проблемы нет необходимости импортировать datetime.

Вы можете использовать date.strftime('%m-%d-%y') для получения строкового представления, такого как "10-22-18".

form = BookingForm(request.form)  
if request.method == "POST" and form.validate():
    start_date = form.start_date.data
    end_date = form.end_date.data

    # print(type(start_date))   -> <class 'datetime.date'>

    start_month = start_date.month
    start_day = start_date.day
    start_year = start_date.year

    start_date_str = start_date.strftime('%m-%d-%y')
    # and so on...

Взгляните на Документация WTForms для DateField.

class wtforms.fields.DateField(default field arguments, format='%Y-%m-%d')
        Same as DateTimeField, except stores a datetime.date.

Вы можете узнать больше об объекте date в документации. Документы Python

Кончик: если бы вы попробовали print(type(start_date)), чтобы посмотреть, что он печатает, вы, вероятно, разобрались бы сами.

Я пробовал использовать «print (type (start_date))», но я получаю None взамен, и очевидно, что ошибка flask: «должен быть строковым или доступным только для чтения буфером, а не None» Спасибо за вашу помощь

Eric 07.10.2018 10:06

Если state_date - это None, то похоже, что вы не получаете данные формы для начала. Разбор не ваша проблема. Вы можете сделать две вещи: (1) Попробуйте использовать что-то вроде PDB или flask-debugtoolber, чтобы выяснить, где что-то пошло не так. (2) Еще одно место для проверки - инструменты разработчика вашего браузера на вкладке Сеть, чтобы увидеть, что запрос POST выполняется с ожидаемыми параметрами запроса.

Kevin Welch 07.10.2018 10:25

Хорошо, обнаружил, что у меня была опечатка, и я исправил ее ... спасибо за вашу помощь, в другом примечании, вы рекомендуете использовать средство выбора даты и времени html для хранения дат в базе данных или просто текстовое поле со слоем jquery наверху?

Eric 07.10.2018 10:31

Другие вопросы по теме