Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.1K
Views
¿Por qué el parámetro de consulta Flask bool siempre se evalúa como verdadero?

Tengo un comportamiento extraño para uno de mis puntos finales en mi aplicación Flask que acepta parámetros de consulta booleanos. No importa lo que le pase, como asfsdfd o true o false , se considera verdadero. Sólo dejándolo vacío se vuelve falso.

 full_info = request.args.get("fullInfo", default=False, type=bool) if full_info: # do stuff

Parece ser que cualquier entrada se considera verdadera. ¿Hay alguna forma de hacer que esto funcione con la forma prevista de Flask de definir el tipo, o necesito aceptar una cadena y compararla?

over 4 years ago · Santiago Trujillo
4 answers
Answer question

0

El parámetro de type de request.args.get es un poco engañoso, ya que no es para especificar el tipo de valor, sino para especificar un invocable :

  • type : un invocable que se usa para convertir el valor en MultiDict . Si este invocable genera un ValueError , se devuelve el valor predeterminado.

Acepta un invocable (por ejemplo, una función), aplica ese invocable al valor del parámetro de consulta y devuelve el resultado. Entonces el código

 request.args.get("fullInfo", default=False, type=bool)

llama a bool(value) donde value es el valor del parámetro de consulta. Sin embargo, en Flask, los valores de los parámetros de consulta siempre se almacenan como cadenas. Y desafortunadamente, llamar a bool() en una cadena no vacía siempre será True :

 In [10]: bool('true') Out[10]: True In [11]: bool('false') Out[11]: True In [12]: bool('any non-empty will be true') Out[12]: True In [13]: bool('') Out[13]: False

En lugar de bool , puede pasar una función que verifica explícitamente si la cadena es igual a la cadena literal true (o cualquier valor que las reglas de su API consideren como verdadero):

 full_info = request.args.get('fullInfo', default=False, type=lambda v: v.lower() == 'true') return jsonify({'full_info': full_info})
 $ curl -XGET http://localhost:5000/test?fullInfo=false {"full_info":false} $ curl -XGET http://localhost:5000/test?fullInfo=adasdasd {"full_info":false} $ curl -XGET http://localhost:5000/test?fullInfo=11431423 {"full_info":false} $ curl -XGET http://localhost:5000/test?fullInfo= {"full_info":false} $ curl -XGET http://localhost:5000/test?fullInfo=true {"full_info":true} $ curl -XGET http://localhost:5000/test?fullInfo=TRUE {"full_info":true} $ curl -XGET http://localhost:5000/test {"full_info":false}
over 4 years ago · Santiago Trujillo Report

0

Un "truco" es usar json.loads como type . Actuará como una "fábrica" que construirá un bool True / False a partir de las cadenas 'true' / 'false'

over 4 years ago · Santiago Trujillo Report

0

Esto es de esperar ya que la cadena de consulta es una cadena real, por lo tanto, cuando obtiene una cadena sin importar lo que sea, si no está vacía, será verdadera. Como en:

 >>>bool('False') True

Tendrá que hacer una comparación de cadenas si desea obtener un valor booleano.

over 4 years ago · Santiago Trujillo Report

0

Funcionaría correctamente si usa el tipo de matraz_restplus.inputs.boolean en lugar de bool. Está explicado aquí. https://github.com/noirbizarre/flask-restplus/issues/199#issuecomment-276645303

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!