سؤال

أنا باستخدام قارورة (فسن 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)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top