decir que tengo un MethodView
con este aspecto:POST-entonces-redirección y MethodViews
from flask import jsonify, request, redirect, flash, views, url_for
from models import Provider
class ProviderAPI(views.MethodView):
def get(self, provider_id):
if provider_id is not None:
provs = [Provider.objects.get_by_id(provider_id)]
else:
provs = Provider.objects.all()
return jsonify(dict(objects=[x.attributes_dict for x in provs]))
def post(self):
data = request.form.to_dict()
data['index'] = request.form.getlist('index')
if data:
obj = Provider(**data)
if obj.is_valid():
obj.save()
flash('%s created' % obj,)
return redirect(url_for(
'provider',
provider_id=obj.id,
)
)
else:
return jsonify(obj.errors)
def put(self, provider_id):
pass
def delete(self, provider_id):
pass
Este registrarse con este fragmento conocido:
def register_api(view, endpoint, url, pk='id', pk_type='int'):
"""
Helper for the API boilerplate, `view` must inherit from MethodView
register_api(UserAPI, 'user', '/user/', pk='provider_id')
"""
view_func = view.as_view(endpoint)
app.add_url_rule(url, defaults={pk: None},
view_func=view_func, methods=['GET',])
app.add_url_rule(url, view_func=view_func, methods=['POST',])
app.add_url_rule('%s<%s:%s>' % (url, pk_type, pk), view_func=view_func,
methods=['GET', 'PUT', 'DELETE'])
Lo que pasa es que después de la post
es Si se realiza correctamente, se redirecciona a la función get
pero con una llamada POST
y aumenta Method Not Allowed
.
127.0.0.1 - - [08/Aug/2012 12:35:21] "POST /provider/ HTTP/1.1" 302 -
127.0.0.1 - - [08/Aug/2012 12:35:21] "POST /provider/44 HTTP/1.0" 405 -
¿Hay una manera de contar redirect
utilizar una llamada GET
en su lugar?
Me estoy poniendo esto también, pero no tienen respuesta y tropezado con esta pregunta. ¿Encontraste una respuesta? – blueblank
Ningún hombre. Volví a hacer el proyecto en django, aunque el matraz se ve mucho mejor ... – tutuca
302 volatilidad http://tools.ietf.org/html/rfc2616#section-10.3.3 "* Nota: RFC 1945 y RFC 2068 especifican que el cliente no puede cambiar el método en la solicitud redirigida. Sin embargo, la mayoría de las implementaciones de agente de usuario existentes tratan 302 como si fuera una respuesta 303, realizando un GET en el valor de campo Ubicación independientemente del método de solicitud original. 303 y 307 se han agregado para los servidores que desean aclarar inequívocamente qué clase de reacción se espera del cliente. * " – soulseekah