1. 如何创建登陆功能
  • 导入flask_wtf模块

  • 在form.py中创建LoginForm表单类和相关字段

  • 创建login.html页面引用 LoginForm实例form的相关字段 比如form.username

  • 创建/login路由,return render_template(记得要渲染form和Title='Sign In')

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        flash('Login requested for use {}, remember_me={}'.format(
            form.username.data, form.remember_me.data))
        return redirect('/index')
    return render_template('login.html', title='Sign In', form=form)

HTTP 路由默认是什么? 如何覆盖?

在Web浏览器中 GET请求会将什么添加到URL中? POST通常什么时候使用? 区别是什么? Method Not Allowed通常是什么原因?

前端的页面怎么写?

在前端的导航栏下,使用jinja2 with语句 将方法get_flashed_messages()的值附给messages

如果报错,python已经在使用中,查看python进程,杀死

ps -fA | grep python

给表单添加错误提示

    <!- 用户错误-->
    {% for error in form.username.errors %}
    <span style="color: red;">[{{ error }}</span>
    {% endfor %}
</p>
<p>
    <!- 密码错误-->
    {{ form.password.label }}<br>
    {{ form.password(size=32) }}
    {% for error in form.password.errors %}
    <span style="color: red">[{{ error }}</span>
    {% endfor %}

span会换行吗? br是什么? 为什么要循环明明只有一个错误,却要用列表?

生成URL

    <div>
        Microblog:
        <a href="/index">Home</a>
        <a href="/login">Login</a>
    </div>


@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        # ...
        return redirect('/index')

直接在模板和文件中编写url有什么坏处?用什么函数可以解决?怎么使用?

app/templates/base.html: 
    <div>
        Microblog:
        <a href="{{ url_for('index') }}">Home</a>
        <a href="{{ url_for('login') }}">Login</a>
    </div>
@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        flash('Login requested for use {}, remember_me={}'.format(
            form.username.data, form.remember_me.data))
        return redirect(url_for('index'))
    return render_template('login.html', title='Sign In', form=form)