dire che ho un MethodView
simile a questo:POST-then-redirect e 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
Questa ottenere registrato con questo frammento noto:
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'])
Il fatto è, che dopo il post
è con successo sta reindirizzando la funzione get
ma con una chiamata POST
e solleva 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 -
C'è un modo per dire redirect
di utilizzare una chiamata GET
invece?
sto ottenendo questo pure, ma non hanno alcuna risposta e ci siamo imbattuti su questa questione. Hai trovato una risposta? – blueblank
Nessun uomo. Sono tornato a fare il progetto in django, anche se il pallone sembra molto meglio ... – tutuca
302 volatilità http://tools.ietf.org/html/rfc2616#section-10.3.3 "* Nota: RFC 1945 e RFC 2068 specificano che il client non è autorizzato a modificare il metodo sulla richiesta reindirizzata.Tuttavia, la maggior parte delle implementazioni degli user agent esistenti trattano il 302 come se fosse una risposta 303, eseguendo un GET sul valore del campo Location indipendentemente dal metodo di richiesta originale. 303 e 307 sono stati aggiunti per i server che desiderano chiarire in modo inequivocabile quale tipo di reazione è prevista per il cliente. * " – soulseekah