Атрибут 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
.
""" Используя Представление основы Класса Фляги """
от фляги импортируют Флягу, запрос, 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)
С Фляги версии 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