संदर्भ के लिए, मैं एक कुप्पी-wtf प्रपत्र बनाने की कोशिश कर रहा हूँ। मैंने ऐसा किया है और इसे सही तरीके से प्रस्तुत किया गया है:

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Sign In')

@APP.route('/')
def index():
    return render_template('login.html', form=LoginForm())

@APP.route('/login', methods=['POST', 'GET'])
def login():
    print(request.method, request.get_json())
    return redirect('/')  # temporary

यहां एचटीएमएल है:

{% block content %}
    <h1>Sign In</h1>
    <form action="/login" method="post" enctype='application/json'>
        {{ form.hidden_tag() }}
        <p>
            {{ form.username.label }}<br>
            {{ form.username(size=32) }}
        </p>
        <p>
            {{ form.password.label }}<br>
            {{ form.password(size=32) }}
        </p>
        <p>{{ form.submit() }}</p>
    </form>
{% endblock %}

हालांकि, जब मैं कुछ भी दर्ज करता हूं और सबमिट पर क्लिक करता हूं, तो login() से जो प्रिंट होता है वह POST None होता है। मुझे समझ में नहीं आता कि कोई डेटा क्यों नहीं भेजा जा रहा है। इसे जेसन होने के लिए मजबूर करने के प्रयास के रूप में, मैंने enctype='application/json' जोड़ा और पहले या बाद में कुछ भी नहीं।

मुझे किसकी याद आ रही है?

1
MaxTheMooshroom 19 फरवरी 2020, 00:57

1 उत्तर

आप प्रपत्र को JSON के रूप में पोस्ट नहीं कर सकते, केवल 3 हैं enctype के लिए विकल्प।

अपने login() फ़ंक्शन में आप request.form के माध्यम से फ़ॉर्म तक पहुँच सकते हैं, या wtforms का उपयोग करते समय, hte डेटा को पॉप्युलेट करने के लिए अपने विचार में फ़ॉर्म को इनिशियलाइज़ करें:

def login():
    login_form = LoginForm()

    if login_form.validate_on_submit(): # this runs only on POST, and checks validation
        username = form.username.data
        password = form.password.data
    ...
1
djnz 20 फरवरी 2020, 03:08
अगर मैं गलत नहीं हूं तो आप वहां एक याद कर रहे हैं। किसी भी मामले में, धन्यवाद!
 – 
MaxTheMooshroom
19 फरवरी 2020, 02:49
अच्छी पकड़, तय :)
 – 
djnz
20 फरवरी 2020, 03:08