قارورة-وتف لا يعالج استجابة النموذج الخاص بي
-
27-10-2019 - |
سؤال
أنا باستخدام قارورة (فسن 0.8) و قارورة وتف (فسن 0.5.2) (على سبيل المثال ، لتحليل النماذج) لجعل موقع بسيط جدا.ومع ذلك ، أنا غير قادر على الحصول على قارورة وتف لتحليل بشكل صحيح بلدي الحصول على النتائج.
بلدي رمز ذات الصلة يشبه هذا:
@app.route("/result", methods=("GET", "POST"))
def submit():
form = MyForm()
print request.args
print request.args.get('aws_id', None, type=str)
print form.is_submitted()
if form.validate_on_submit():
flash('Success')
aws_id = form.aws_id.data
return render_template("index.html", form=form)
إذا قمت بإرسال النموذج الخاص بي مع حقل واحد يسمى 'أوس_يد' مع الحصول على أحصل على الإخراج التالي على وحدة التحكم.
127.0.0.1 - - [19/Oct/2011 22:28:59] "GET /result?aws_id=test_string HTTP/1.1" 200 -
ImmutableMultiDict([('aws_id', u'test_string')])
test_string
False
يبدو لي مثل تقديم يعمل بشكل صحيح،ولكن قارورة وتف لا تفعل شيئا.بشكل أساسي ، الطريقة القديمة للتعامل مع مخرجات النموذج تعمل ، الطلب.أرجس.الحصول على الطريقة ، ولكن النموذج الجديد.التحقق من صحة لا يفعلون الخير السحري.
أي أفكار?(وتف!)
المحلول
انتقلت بلدي التطبيق إلى جذر موقعي ، حذف واحد الذي كان هناك (=زائدة عن الحاجة) ، وأضاف request.form
إلى فئة ميفورم.يبدو أن إصلاحه.كان من الضروري أيضا تعيين csrf_enabled
إلى كاذبة.
@app.route("/", methods=("GET", "POST"))
def submit():
form = MyForm(request.form, csrf_enabled=False)
if form.validate_on_submit():
print form.data
return render_template("index.html", form=form)
نصائح أخرى
قارورة-وتف Form
فئة is_submitted
الطريقة تبدو مثل:
def is_submitted(self):
"""
Checks if form has been submitted. The default case is if the HTTP
method is **PUT** or **POST**.
"""
return request and request.method in ("PUT", "POST")
وفي __init__
يحتوي على هذا الرمز ، والذي يضمن عادة تحميل بيانات النموذج تلقائيا من طلب القارورة:
if formdata is _Auto:
if self.is_submitted():
formdata = request.form
لذلك فمن الواضح...إذا قمت بإرسال النموذج عبر الحصول على أنك لا تحصل على أي من السلوك السيارات لطيفة.هذا أمر مفهوم لأنه إذا كان طلب الحصول ليس من الواضح ما إذا كان النموذج قد تم إرساله أو كنت مجرد تحميل الصفحة.هذا هو جانبا من أي قضايا سرف.
validate_on_submit
لا يعمل أيضا ، لأنه يعتمد أيضا على is_submitted
قارورة نفسها أيضا لا تحليل الحقول الحصول على request.form
لك.
ينتهي بك الأمر إلى القيام بشيء مثل:
form = MyForm(request.args, csrf_enabled=False)
if 'aws_id' in request.args and form.validate():
flash('Success')
aws_id = form.aws_id.data
(كل تفترض الخاص بك MyForm
الطبقة يرث من from flask.ext.wtf import Form
)