处理 POST 请求 Flask

Abh*_*jay 1 python post flask web

我正在尝试将我网站登录页面中的数据作为 POST 请求传递给 Flask。但是,Flask 无法获取任何数据。这是运行 Flask 应用程序的 test.py 文件的代码片段。我意识到代码没有进入方法本身。谁能帮我理解我哪里出错了?

@app.route('/', methods=['POST'])
def my_form_post():
    text = request.form['text']
    processed_text = text.upper()
    print "Processed text is..."
    print processed_text
    return processed_text
Run Code Online (Sandbox Code Playgroud)

这是我的登录表单的片段:

div class="modal fade" id="direct-login-form" tabindex="-1" role="dialog" aria-labelledby="direct-login-form-label" aria-hidden="true">
      <div class="vertical-alignment-helper">
          <div class="modal-dialog vertical-align-center">
              <div class="modal-content">
                  <div class="modal-header">
                      <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span>

                      </button>
                       <h4 class="modal-title" id="direct-login-form-label">Login</h4>

                  </div>
                  <div class="modal-body">
                    <div class="wrap-login-form wrap-reviews">
                      <form id="direct-login" form action="." method="POST" class="form-horizontal">
                        <div class="form-group">
                          <label class="col-sm-3" for="direct_username">Username</label>
                          <div class="col-sm-9">
                            <input type="text" name="text" class="form-control" id="direct_username" placeholder="Username">
                          </div>
                        </div>
                        <div class="form-group">
                          <label class="col-sm-3" for="direct_password">Password</label>
                          <div class="col-sm-9">
                            <input type="password" class="form-control" id="direct_password" placeholder="Password">
                          </div>
                        </div>
                        <div class="wrap-slidecheck clearfix">
                          <div class="col-sm-3"></div>
                          <div class="col-sm-9">
                            <div class="slidecheck">
                              <input type="checkbox" id="direct_remember_me" name="check" />
                              <label for="direct_remember_me"></label>
                            </div>
                            <span>Remember me</span>
                          </div>
                        </div>
                        <div class="form-group">
                          <label class="col-sm-3"></label>
                          <div class="col-sm-9">
                            <button type="submit" name="my-form" class="btn btn-default" value="Send">Submit</button>
                          </div>
                        </div>
                        <div class="form-group">
                          <label class="col-sm-3"></label>
                          <div class="col-sm-9">
                            <p class="help-block"><a href="../../vxeg/indexc2b6.html?action=lostpassword">Lost your password?</a><span> or </span><a href="../../membership-account/index.html">Register an Account</a></p>
                          </div>
                        </div>
                        <input type="hidden" id="direct_security" name="direct_security" value="f0abedaf74" /><input type="hidden" name="_wp_http_referer" value="/directory-category/coffee-lounge/" />                      </form>
                    </div>
                  </div>
              </div>
          </div>
      </div>
  </div>
Run Code Online (Sandbox Code Playgroud)

Say*_*een 5

我在我的机器上模拟了你的问题,它起作用了!
我进行了以下更改。

供查看

@app.route("/")
def hello():
    return render_template('register.html')


@app.route("/register", methods=['POST'])
def register():
    text = request.form['text']
    passwd = request.form['passwd']
    processed_text = text.upper()
    print "Processed text is...", processed_text, passwd
    #do your further processing like saving to Database...
    return render_template('register.html') #send to the profile/dashboard page
Run Code Online (Sandbox Code Playgroud)

对于 html 文件

<form id="direct-login" form action="{{ url_for('register') }}" method="POST" class="form-horizontal">
Run Code Online (Sandbox Code Playgroud)


 <input type="password" class="form-control" id="direct_password" name='passwd' placeholder="Password">
Run Code Online (Sandbox Code Playgroud)

但是,您应该使用WTF 表单,您将拥有一个干净且可重用的代码。

一个示例 forms.py

class RegistrationForm(Form):
    email = StringField('Email', validators=[Required(), Email(), Length(1, 64)])
    username = StringField('Username', validators=[Required(), Length(1, 64), Regexp('^[A-Za-z][A-za-z0-9._]*$', 0,'Username must have only letters, dots, digitsm or underscores')])
    password = PasswordField('Password', validators=[Required(), EqualTo('password2', message='Password must match.')])
    password2 = PasswordField('Confirm Password', validators=[Required()])
    submit = SubmitField('Register')


    '''
    Custome validator for email validate_*
    '''
    def validate_email(self, field):
    if(User.query.filter_by(email= field.data)).first():
        raise ValidationError('Email already registered.')

    '''
    Custome validator for email validate_*
    '''
    def validate_username(self, field):
    if(User.query.filter_by(username = field.data)).first():
        raise ValidationError('Username already registered.')
Run Code Online (Sandbox Code Playgroud)

然后你的 html 变成

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

{% block title %} - Register{% endblock %}
{% block page_content %}
    <div class="page-header">
    <h1>Register</h1>
    </div>
    <div class="col-md-5">
        {{ wtf.quick_form(form) }}
    </div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)