首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当值为DateTime时,对DateTime的Flask-Marshmallow验证失败

当值为DateTime时,对DateTime的Flask-Marshmallow验证失败
EN

Stack Overflow用户
提问于 2020-10-01 01:33:49
回答 1查看 509关注 0票数 1

我有以下数据:

代码语言:javascript
复制
data={
     'last_visit':datetime.datetime(2020, 9, 30, 11, 12, 24, 512347)
}

该模式基于模型:

代码语言:javascript
复制
class ModelSchema(db_schema.SQLAlchemyAutoSchema):
    class Meta:
        model = UserModel

以及模型本身:

代码语言:javascript
复制
class UserModel(db.Model, AllFeaturesMixin):
    last_visit= db.Column(db.DateTime, nullable=False, default=datetime.utcnow)

当我做验证时,我有一个错误:

代码语言:javascript
复制
> schema.validate(self.data)
> {'last_visit': ['Not a valid datetime.']}

不知道为什么。

EN

回答 1

Stack Overflow用户

发布于 2020-10-04 19:54:58

应该对来自flask.request.get_json()或等效的原始数据调用validate()。您正在寻找的是来自json.loads()之类的东西的反序列化的原始结果。使用这个原始字典,last_visit仍然是一个字符串,并且是marshmallow DateTime field所期望的(格式化的日期时间字符串)。

下面是一个基本的例子:

代码语言:javascript
复制
import datetime
import json
import flask
import marshmallow as ma
from datetime import timezone

app = flask.Flask(__name__)
default_headers = {"Content-Type": "application/json"}


class ModelSchema(ma.Schema):
    last_visit = ma.fields.DateTime()


@app.route("/last_visit", methods=["POST"])
def get_last_visit():
    schema = ModelSchema()
    data = flask.request.get_json()

    errors = schema.validate(data)
    if errors:
        return errors, 400, default_headers

    last_visit_data = schema.load(data)
    last_visit_data["last_visit"] = datetime.datetime.now(tz=timezone.utc)
    last_visit_response_data = schema.dumps(last_visit_data)

    return last_visit_response_data, 200, default_headers
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64142892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档