Tengo tales puntos finales
@app.route('/values', methods=['GET', 'POST']) def operation_types(): return '', 200 @app.route('/values/', methods=['GET', 'DELETE', 'PUT']) @app.route('/values/<code>', methods=['GET', 'DELETE', 'PUT']) def operation_type_(code: str = ''): if request.method == 'GET': return '', 200 if request.method == 'DELETE': return '', 200 if request.method == 'PUT': return '', 201 return '', 405Quiero que la aplicación se comporte así.
GET /values # lists all values POST /values # adds a new value GET /values/123 # gets a value DELETE /values/123 # deletes a value PUT /values/123 # updates a valuey también quiero que esto, sea tratado como el posterior:
GET /values/ # gets a value with code "" DELETE /values/ # deletes a value with code "" PUT /values/ # updates a value with code "" En cualquier otro caso, quiero obtener 404 si falta la ruta, o 405 si el método no está permitido.
Pero aquí está mi problema:
DELETE /values # this should return 405, because method isn't allowed for /values, only for /values/ Pero en su lugar, obtengo 308 , con Location: header que me redirige a /values/ y también el matraz muestra un cuerpo HTML extraño de Werkzeug.
Quiero deshabilitar esta redirección automática por completo , no quiero que el matraz haga ningún tipo de redirección por mí.
PD: Intenté configurar strict_slashes , pero luego GET /values/ se confunde con GET /values . PD: sé que puedo agregar DELETE a los primeros methods de punto final, pero eso solo funciona para un único punto final; y quiero configurarlo en toda la aplicación.