首页 > 解决方案 > Flask - 提交按钮什么都不做

问题描述

我正在关注烧瓶的教程。(第一次使用)所以我建立了他的小博客迷你网站,它包含一个注册表格。

当我运行它时,我得到了很好的 html,看起来它应该对我有用。我不知道为什么它不起作用。甚至没有对服务器的请求,就好像我根本没有点击按钮一样。


#main.py
from flask import Flask, render_template, url_for, flash, redirect
from forms import RegistrationForm, LoginForm
app = Flask(__name__)

app.config['SECRET_KEY'] = 'Secret Key'


@app.route("/")
@app.route("/home")
def hello():
    return render_template('home.html', posts=posts)

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



#THIS IS THE FORM
@app.route("/register", methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        flash(f'Account created for {form.username.data}!', 'success')
        return redirect(url_for('home'))
    return render_template('register.html', title='Register', form=form)




@app.route("/login")
def login():
    form = LoginForm()
    return render_template('login.html', title='Log In', form=form)


if __name__ == '__main__':
    app.run(debug=True) 
<!-- register.html -->

{% extends "layout.html" %}
{% block content %}
    <div class='content-section'>
        <from method="POST" action="">
            {{ form.hidden_tag() }}
            <fieldset class='form-group'>
                <legend class='border-bottom mb-4'>Join Today</legend>
                <div class="form-group">
                    {{ form.username.label(class="form-control-label") }}
                    {{ form.username(class="form-control form-control-lg") }}

                </div>
                <div class="form-group">
                    {{ form.email.label(class="form-control-label") }}
                    {{ form.email(class="form-control form-control-lg") }}

                </div>
                <div class="form-group">
                    {{ form.password.label(class="form-control-label") }}
                    {{ form.password(class="form-control form-control-lg") }}

                </div>
                <div class="form-group">
                    {{ form.confirm_password.label(class="form-control-label") }}
                    {{ form.confirm_password(class="form-control form-control-lg") }}
                </div>
            </fieldset>
            <div class="form-group">
                {{ form.submit(class="btn btn-outline-info") }}
            </div>
        </from>
    </div>
    <div class ="border-top pt-3">
        <small class="text-muted">
            Alreade Have An Account? <a class="ml-2" href="{{ url_for('login') }}">Sign In</a>
        </small>
    </div>
{% endblock content %}


#forms.py

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo


class RegistrationForm(FlaskForm):
    username = StringField('Username',
                           validators=[DataRequired()])
    email = StringField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
    submit = SubmitField('Sign Up')

我得到的结果如下:

<!-- Sourcecode Browser -->
<body>
    <header class="site-header">
      <nav class="navbar navbar-expand-md navbar-dark bg-steel fixed-top">
        <div class="container">
          <a class="navbar-brand mr-4" href="/">Flask Blog</a>
          <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarToggle" aria-controls="navbarToggle" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
          </button>
          <div class="collapse navbar-collapse" id="navbarToggle">
            <div class="navbar-nav mr-auto">
              <a class="nav-item nav-link" href="/">Home</a>
              <a class="nav-item nav-link" href="/about">About</a>
            </div>
            <!-- Navbar Right Side -->
            <div class="navbar-nav">
              <a class="nav-item nav-link" href="/login">Login</a>
              <a class="nav-item nav-link" href="/register">Register</a>
            </div>
          </div>
        </div>
      </nav>
    </header>


    <main role="main" class="container">
      <div class="row">
        <div class="col-md-8">




    <div class='content-section'>
        <from method="POST" action="">
            <input id="csrf_token" name="csrf_token" type="hidden" value="Huge Secret">
            <fieldset class='form-group'>
                <legend class='border-bottom mb-4'>Join Today</legend>
                <div class="form-group">
                    <label class="form-control-label" for="username">Username</label>
                    <input class="form-control form-control-lg" id="username" name="username" required type="text" value="">

                </div>
                <div class="form-group">
                    <label class="form-control-label" for="email">Email</label>
                    <input class="form-control form-control-lg" id="email" name="email" required type="text" value="">

                </div>
                <div class="form-group">
                    <label class="form-control-label" for="password">Password</label>
                    <input class="form-control form-control-lg" id="password" name="password" required type="password" value="">

                </div>
                <div class="form-group">
                    <label class="form-control-label" for="confirm_password">Confirm Password</label>
                    <input class="form-control form-control-lg" id="confirm_password" name="confirm_password" required type="password" value="">
                </div>
            </fieldset>
            <div class="form-group">
                <input class="btn btn-outline-info" id="submit" name="submit" type="submit" value="Sign Up">
            </div>
        </from>
    </div>
    <div class ="border-top pt-3">
        <small class="text-muted">
            Alreade Have An Account? <a class="ml-2" href="/login">Sign In</a>
        </small>
    </div>


        </div>
        <div class="col-md-4">
          <!-- SIDEBAR -->
        </div>
      </div>
    </main>



    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</body>
</html>

首先,我认为这是因为 action 参数对于 form 是空的,所以我尝试更改它。什么也没发生。我删除了所有验证器,但这也没有做任何事情。我在控制台中看到没有向服务器发出请求。我点击提交,实际上没有任何反应。我试过铬和边缘。我究竟做错了什么?

标签: pythonhtmlflask

解决方案


你有一个错字<from method="POST" action="">- 它应该是<form ...>(并且action=""是隐含的,所以只是<form method="POST">)。


推荐阅读