Let's say I have a MethodView that looks like this:
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
This is recorded in this famous fragment:
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'])
The fact is that after successful completion of post it is redirected by the get function, but with a call to post , and it raises 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 -
Is there a way to tell redirect use a get call instead?