欢迎访问宙启技术站
智能推送

Python中实现带有记住我功能的LoginForm()表单教程

发布时间:2024-01-03 23:03:19

在Python中,可以使用Flask-WTF库来实现带有记住我功能的LoginForm()表单。下面是一个教程,帮助你了解如何实现这个功能,并附带一个使用例子。

1. 安装依赖库

首先,你需要安装以下依赖库:

- Flask-WTF:用于在Flask应用程序中处理表单

- Flask-Login:用于在Flask应用程序中处理用户认证和会话管理

可以使用以下命令安装这些库:

pip install flask-wtf flask-login

2. 创建Flask应用程序

创建一个Flask应用程序,并导入所需的模块和库:

from flask import Flask, render_template, redirect, url_for
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, SubmitField
from wtforms.validators import DataRequired
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
login_manager = LoginManager(app)
login_manager.login_view = 'login'

3. 创建LoginForm()表单类

创建LoginForm()表单类,并定义所需的字段和验证器:

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

4. 创建User()用户类

创建一个User()用户类,用于管理用户信息:

class User(UserMixin):
    def __init__(self, id):
        self.id = id
        self.username = 'user'
        self.password = 'password'

    @staticmethod
    def get(user_id):
        if user_id == 1:
            return User(1)

5. 实现用户认证和会话管理

在Flask应用程序中,实现用户认证和会话管理的必要功能:

@login_manager.user_loader
def load_user(user_id):
    return User.get(int(user_id))

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.get(1)
        if user and form.username.data == user.username and form.password.data == user.password:
            login_user(user, remember=form.remember_me.data)
            return redirect(url_for('protected'))
    return render_template('login.html', title='Sign In', form=form)

@app.route('/protected')
@login_required
def protected():
    return 'Protected Page'

@app.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(url_for('login'))

6. 创建login.html模板文件

在templates文件夹中创建login.html模板文件,并添加以下代码:

{% extends "base.html" %}
{% block content %}
  <h1>{{ title }}</h1>
  <form method="POST" action="{{ url_for('login') }}">
    {{ form.hidden_tag() }}
    <p>
      {{ form.username.label }}
      {{ form.username(size=20) }}
    </p>
    <p>
      {{ form.password.label }}
      {{ form.password(size=20) }}
    </p>
    <p>{{ form.remember_me() }} {{ form.remember_me.label }}</p>
    <p>{{ form.submit() }}</p>
  </form>
{% endblock %}

7. 创建base.html模板文件

在templates文件夹中创建base.html模板文件,并添加以下代码:

<!doctype html>
<title>{% block title %}{% endblock %}</title>
{% block content %}{% endblock %}

8. 运行应用程序

在应用程序所在的目录中,运行以下命令启动应用程序:

python app.py

现在,你可以在浏览器中访问http://localhost:5000/login 来查看并测试登录表单的记住我功能。

这就是一个使用Flask-WTF和Flask-Login库来实现带有记住我功能的LoginForm()表单的教程和使用例子。希望对你有帮助!