Zmiana metody żądania za pomocą ukrytego pola _metod w Flask

Zacząłem zbierać Pythona i Flask jako ćwiczenie do nauki, a pochodząc z PHP / Symfony2, mogłem dodać ukryte pole _method do formularza, aby zastąpić metodę POST za pomocą DELETE lub PUT.

Wygląda na to, że Flask nie obsługuje tego natywnie i hakowałem z różnymi pomysłami, w tymhttp://flask.pocoo.org/snippets/38/, który działa, ale wymaga umieszczenia nadpisania w akcji formularza, a nie jako ukrytego pola, które IMO sprawia, że ​​adres URL wygląda nieestetycznie.

W komentarzach do powyższego adresu znajduje się fragment kodu, który sprawia, że ​​_method działa z perspektywy routingu, ale, jak omówiono to również, powoduje zawieszenie żądania, jeśli spróbujesz uzyskać dostęp do request.form w widokach.

Czy ktoś ma na to obejście? Jeśli nie, poradzę sobie ze wszystkim jako POST, ale byłoby miło znaleźć sposób, aby go uruchomić.

Twoje zdrowie.

EDYTOWAĆ: Oto kod dla każdego, kto chce się przyjrzeć:

Szablon:

<form action="{{ url_for('login') }}" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input class="span12" name="email" type="text" placeholder="E-mail address" value="{{ email }}">
    <input class="span12" name="password" type="password" placeholder="Your password">
    <a href="{{ url_for('reset_password') }}" class="forgot">Forgot password?</a>
    <div class="remember">
        <input id="remember-me" type="checkbox">
        <label for="remember-me">Remember me</label>
    </div>
    <input class="btn-glow primary login" type="submit" name="submit" value="Log in">
</form>

app / __ init__.py

from flask import Flask
from werkzeug.wrappers import Request

class MethodRewriteMiddleware(object):
    def __init__(self, app, input_name='_method'):
        self.app = app
        self.input_name = input_name

    def __call__(self, environ, start_response):
        request = Request(environ)

        if self.input_name in request.form:
            method = request.form[self.input_name].upper()

            if method in ['GET', 'POST', 'PUT', 'DELETE']:
                environ['REQUEST_METHOD'] = method

        return self.app(environ, start_response)

app = Flask(__name__)
app.wsgi_app = MethodRewriteMiddleware(app.wsgi_app)
from app import views

Widok:

from flask import render_template
@app.route('/user/login', methods=['GET','POST','PUT'])
def login():
    emailvalue = '[email protected]'
    if request.method == 'PUT':
        emailvalue = request.form['email']
    return render_template('login.html', email=emailvalue)

questionAnswers(2)

yourAnswerToTheQuestion