Sagen, ich habe eine MethodView
wie folgt aussehen:POST-then-Umleitung und 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
Das mit diesem bekannten Schnipsel registrieren lassen:
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'])
Die Sache ist, dass nach dem post
ist erfolgreich es ist die get
Funktion umgeleitet, aber mit einem POST
Anruf und es erhöht 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 -
Gibt es eine Möglichkeit redirect
zu sagen, anstatt einen GET
Anruf zu benutzen?
Ich bekomme dies auch, haben aber keine Antwort und stolperte auf dieser Frage. Hast du eine Antwort gefunden? – blueblank
Kein Mann. Ging zurück zum Projekt in Django, obwohl Kolben sieht viel besser aus ... – tutuca
302 Volatilität http://tools.ietf.org/html/rfc2616#section-10.3.3 "* Hinweis: RFC 1945 und RFC 2068 angeben, dass Dem Client ist es nicht erlaubt, die Methode für die umgeleitete Anforderung zu ändern.Die meisten vorhandenen Benutzeragentenimplementierungen behandeln 302 jedoch so, als ob es eine 303-Antwort wäre, die unabhängig von der ursprünglichenAnforderungsmethode ein GET für den Standortfeldwert ausführt 303 und 307 wurden für Server hinzugefügt, die eindeutig angeben möchten, welche Art von Reaktion vom Client erwartet wird. * " – soulseekah