Возврат ответа JSON из представления Flask

Атрибут DisplayFormat - это буквально только для отображения значения. Если вы установите ApplyFormatInEditMode все, что он сделает, также примените формат к содержимому ваших данных, если он отображается в текстовом поле (предназначенное для редактирования). Это не имеет никакого отношения к проверке.

Если вы хотите проверить ввод с использованием указанного вами формата, вам, вероятно, придется создать свой собственный ValidationAttribute и использовать DateTime.ParseExact(), чтобы попытаться убедитесь, что он соответствует формату, который вы ожидаете. Единственный откат - у него не будет поддерживающей логики проверки на стороне клиента, если вы его не напишете.

Я не тестировал это, но он должен дать вам начало.

public class DateTimeFormatAttribute : ValidationAttribute
{
   public int Format { get; set; }

   public override bool IsValid(object value)
   {
        if (value == null)
            return true;

        DateTime val;
        try
        {
            val = DateTime.ParseExact(value.ToString(), Format, null);
        }
        catch(FormatException)
        {
            return false;
        }

        //Not entirely sure it'd ever reach this, but I need a return statement in all codepaths
        return val != DateTime.MinValue;
   }
}

Тогда это просто вопрос использования. [DateTimeFormat(Format = "dd MMM yyyy")]

UPDATE: Извините, я не думаю, что я четко прочитал ваш вопрос. Причина, по которой он жалуется на данные по обратной передаче, состоит в том, что формат, который вы пытаетесь использовать, не является стандартным. Возможно, вам лучше реализовать один из общих сборщиков дат в Интернете, который будет использоваться при заполнении поля, а не в том, чтобы отредактировать его вручную или ожидать нестандартного формата. Пользовательские форматы отображения отлично подходят для отображения, но если вы хотите использовать настраиваемый формат для режима редактирования, который по умолчанию DateTime.Parse не понимает, вам придется писать свой собственный ModelBinder, я верю, и это то, чего я не сделал , в качестве альтернативы вы можете изменить тип данных в своей модели viewmodel на строку и проанализировать ее самостоятельно в методе действий (вы все равно можете использовать предоставленный в этом случае валидатор). Чтобы избавиться от вашей ошибки (но вы также удалите свой собственный формат в режиме редактирования), вам придется удалить свойство ApplyFormatInEditMode.

394
задан davidism 26 January 2017 в 16:45
поделиться

2 ответа

""" Используя Представление основы Класса Фляги """

от фляги импортируют Флягу, запрос, jsonify

из приложения MethodView

импорта flask.views = Фляга ( __ имя __ )

приложение add_url_rule ('/summary / ', view_func=Summary.as_view ('сводка'))

Сводка класса (MethodView):

    def __init__(self):
        self.response = dict()

    def get(self):
        self.response['summary'] = make_summary()  # make_summary is a method to calculate the summary.
        return jsonify(self.response)
0
ответ дан 22 November 2019 в 23:26
поделиться

С Фляги версии 1.1.0 теперь обрабатывает ответ JSON для Вас:

@app.route("/users", methods=['GET'])
def get_user():
    return {
        "user": "John Doe",
    }

API Фляги с JSON https://flask.palletsprojects.com/en/1.1.x/quickstart/#apis-with-json

0
ответ дан 22 November 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: