How to validate date type in POST payload with flask restplus? How to validate date type in POST payload with flask restplus? flask flask

How to validate date type in POST payload with flask restplus?


As @andilabs mentions, it really weird to define expected payload twice. You can define expected payload by using only RequestParser as so:

from flask import Flask, jsonifyfrom flask_restplus import Api, Resource, fields, reqparse, inputsapp = Flask(__name__)api = Api(app)ns = api.namespace('ns')parser = reqparse.RequestParser()parser.add_argument('a_str', type=str)parser.add_argument('a_date', type=inputs.datetime_from_iso8601, required=True)@ns.route('/')class AResource(Resource):    @ns.expect(parser)    def get(self):        try:  # Will raise an error if date can't be parsed.            args = parser.parse_args()  # type `dict`            return jsonify(args)        except:  # `a_date` wasn't provided or it failed to parse arguments.            return {}, 400if __name__ == '__main__':    app.run(debug=True)

Test by using curl:

$ curl -XGET -H "Content-type: application/json" -d '{"a_str": "Name", "a_date": "2012-01-01"}' 'http://127.0.0.1:5000/ns/'{  "a_date": "Sun, 01 Jan 2012 00:00:00 GMT",   "a_str": "Name"}


To validate you can add parameter validate:

@ns.expect(payload, validate=True)

Here is the link to documentation:https://flask-restplus.readthedocs.io/en/stable/swagger.html#the-api-expect-decorator


Step 1: pip install isodate

Step 2: pip install strict-rfc3339

Step 3:

from jsonschema import FormatCheckerapi = Api(your_app,format_checker=FormatChecker(formats=("date-time",)))

Step 4:

@api.expect(your_fields, validate=True)

Reference:Open Issue: https://github.com/noirbizarre/flask-restplus/issues/204