Snippets are unofficial and unmaintained.
This is an archived view of user-submitted snippets. Despite being hosted on the Flask site, they are not official. No Flask maintainer has curated or checked the snippets for security, correctness, or design.
HTML4 and XHTML only specify POST and GET as HTTP methods that forms can use. HTTP itself however supports a wider range of methods, and it makes sense to support them on the server.
If you however want to make a form submission with PUT for instance, and you are using a client that does not support it, you can override it.
First you need to hook this middleware in:
from werkzeug import url_decode class MethodRewriteMiddleware(object): def __init__(self, app): self.app = app def __call__(self, environ, start_response): if 'METHOD_OVERRIDE' in environ.get('QUERY_STRING', ''): args = url_decode(environ['QUERY_STRING']) method = args.get('__METHOD_OVERRIDE__') if method: method = method.encode('ascii', 'replace') environ['REQUEST_METHOD'] = method return self.app(environ, start_response)
To then override the method, you have to append
?__METHOD_OVERRIDE__=PUT to the form action:
<form action="?__METHOD_OVERRIDE__=PUT"> ... </form>
This snippet by Armin Ronacher can be used freely for anything you like. Consider it public domain.