GithubHelp home page GithubHelp logo

Comments (6)

peter-doggart avatar peter-doggart commented on June 3, 2024

Flask puts form data in a different place in the Request object. You need to call request.form to get form data directly. As you see, request.json will be empty or not set in the case that only form data is passed.

However, you have set up a request parser here but you don't currently use it. So you should be able to use it to retrieve the values regardless of location passed to your code. Something like:

parser = api.parser()
parser.add_argument('title', type=str, help='Some param', required=True, location=('form', 'json'))
parser.add_argument('content', type=str, help='Some param',  required=True, location=('form', 'json'))

@api.route('/send')
class Send(Resource):
    @api.doc(parser=parser, validate=True)
    def post(self, **kwargs):
        input_args = parser.parse_args() # This returns a dictionary containing the parsed values from the specified locations.
        print(f"Title: {input_args['title']}")
        print(f"Content: {input_args['content']}")

from flask-restx.

sandyboxy avatar sandyboxy commented on June 3, 2024

So, if I use location=('form', 'json')

  • a POST request with empty data is call (see picture below);
  • params are passed in URL request instead of body

flask

This is the output I wish to have:

CURL

curl -X 'POST' \
  'http://localhost:5000/send \
  -H 'accept: application/json' \
  -d '{"title":"test", "content":"test"}'

Request URL

http://localhost:5000/send

I know I can have this by set location='json' but, as I said, in this way I would not have a form with input fields.

from flask-restx.

kartikeyporwal avatar kartikeyporwal commented on June 3, 2024

So, if I use location=('form', 'json')

  • a POST request with empty data is call (see picture below);
  • params are passed in URL request instead of body

flask

This is the output I wish to have:

CURL

curl -X 'POST' \
  'http://localhost:5000/send \
  -H 'accept: application/json' \
  -d '{"title":"test", "content":"test"}'

Request URL

http://localhost:5000/send

I know I can have this by set location='json' but, as I said, in this way I would not have a form with input fields.

@sandyboxy, try with location="form"

from flask-restx.

sandyboxy avatar sandyboxy commented on June 3, 2024

@sandyboxy, try with location="form"

Hi @kartikeyporwal,
if I try with location="form" setting I obtain the following output:

curl -X 'POST' \
  'http://localhost:5000/send' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'title=test&content=test'

instead of having the following:

curl -X 'POST' \
  'http://localhost:5000/send' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "title": "string",
  "content": "string"
}'

from flask-restx.

kartikeyporwal avatar kartikeyporwal commented on June 3, 2024

@sandyboxy, try with location="form"

Hi @kartikeyporwal, if I try with location="form" setting I obtain the following output:

curl -X 'POST' \
  'http://localhost:5000/send' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'title=test&content=test'

instead of having the following:

curl -X 'POST' \
  'http://localhost:5000/send' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "title": "string",
  "content": "string"
}'

Why you need the json when you are specifying the params as form? If you need to pass json then specify location="json".

  • If you specify in location=json, send data in json and receive data as json using request.json
  • If you specify in location=form, send data in form and receive data as form using request.form

from flask-restx.

sandyboxy avatar sandyboxy commented on June 3, 2024

Simply I wish to use swagger/flask-api to show a simplified page to test API (using form view) and show output as json output instead of form.

from flask-restx.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.