Öğrenme alıştırması olarak Python ve Flask toplamaya başladı ve PHP/Symfony2'den geliyordu, POST yöntemini bir DELETE ile geçersiz kılmak için gizli bir _method alanı ekleyebilirim. KOYMAK.Flask'ta gizli alan _method kullanılarak istek yöntemi değiştirme
Flask bunu yerel olarak desteklemiyor gibi gözüküyor ve http://flask.pocoo.org/snippets/38/ da dahil olmak üzere çeşitli fikirlerle uğraşıyor, ancak IMO'nun yaptığı gizli alan yerine form eylemine geçersiz kılmayı içeriyor URL çirkin görünüyor.
Yukarıdaki adresin yorumlarında, bir yönlendirme perspektifinden _method işini yapan bir pasaj var, ancak orada da tartışıldığı gibi, isteklere erişmek için istekte bulunun. .
Bunun için bir çözüm var mı? Değilse, ben sadece her şeyi POST olarak ele alacağım, ama işe almak için bir yol bulabilmek güzel olurdu.
Şerefe.
DÜZENLEME:
Şablon:
<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>
uygulama/__ 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
Görünüm İşte bakmak isteyen herkes için kod:
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)
[request.form] (http: Muhtemelen ben asla gerçek uygulamasında aşağıdaki çalışırken riski neden olan kendim bilmiyorum ayrıca bazı tehlikeli kenar vakası vardır // flask.pocoo.org/docs/quickstart/#the-request-object) bazı kullanımlarınız olabilir. – John
Merhaba @johnthexiii, yorumunuz için teşekkürler. Ben gerçekten _method ayarlanmış olup olmadığını kontrol etmek için request.form kullanıyorum, ancak bunu yaptığınızda ve middleware içinde REQUEST_METHOD değiştirdikten sonra, request.form görünümlerine erişemiyorum (uygulama sadece kilitleniyor). Bu, denediğim öneri ile bir bağlantıdır: http://flask.pocoo.org/snippets/38/#comment-box (ikinci yorum) – aleayr
Bazı kodları neyin daha iyi bir genel görünümü vermek için koydum Başarmaya çalışıyorum. – aleayr