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

用Python编写的简单网站登录系统

发布时间:2023-12-04 12:45:38

网站登录系统是一种常见的身份验证手段,用于确保只有授权的用户可以访问特定的网站内容。在这个简单的教程中,我们将使用Python编写一个基本的网站登录系统,并提供详细的使用示例。

# 网站登录系统的组成

一个典型的网站登录系统由以下组成:

1. 注册页面:允许用户在网站上创建一个新的账户。

2. 登录页面:允许用户使用其已注册的账户登录网站。

3. 验证模块:用于验证用户提供的登录凭证(例如用户名和密码)是否正确。

4. 用户会话管理:一旦用户成功登录,会话管理模块将创建一个令牌或会话,以记录用户的身份,以便他们在访问受限资源时验证身份。

现在,我们将逐步介绍如何使用Python编写这样的网站登录系统,并提供一个简单的使用示例。

# 安装所需的库

在编写这个网站登录系统之前,我们需要确保安装了以下Python库:

- Flask:用于创建网站和处理HTTP请求。

- Flask-WTF:用于处理表单的Flask扩展。

- Flask-Login:用于处理用户验证和会话管理的Flask扩展。

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

pip install Flask Flask-WTF Flask-Login

# 编写注册页面

我们将从编写注册页面开始。在这个页面上,用户将输入他们的用户名和密码进行账户注册。在Python中,我们使用Flask和Flask-WTF来处理表单的创建和验证。

首先,创建一个名为app.py的Python文件,并导入所需的库:

from flask import Flask, render_template, redirect, url_for
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, EqualTo

然后,我们将创建一个Flask应用实例,并设置应用的密钥:

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'

在上面的代码中,SECRET_KEY是一个用于对表单数据进行加密的随机字符串。在实际开发中,你应该使用一个难以猜测的密钥来确保数据的安全性。

接下来,我们将创建一个新的表单类,用于接收用户的输入:

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

在上面的代码中,我们使用StringFieldPasswordField类创建了用户名和密码输入字段。validators参数用于指定字段的验证规则。SubmitField类用于创建一个提交按钮。

然后,我们将编写一个处理表单的视图函数,用于处理用户提交的数据:

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        # 处理用户的注册逻辑
        return redirect(url_for('login'))
    return render_template('register.html', form=form)

在上面的代码中,我们首先实例化我们创建的表单类,并将其传递给注册页面的模板。然后,我们使用validate_on_submit()方法来确定用户是否已经提交了表单。如果是,则处理用户的注册逻辑,并重定向到登录页面。否则,渲染并返回注册页的模板。

最后,我们将创建一个HTML模板文件,用于呈现注册页面的表单。在项目根目录下创建一个名为templates的文件夹,并在其中创建名为register.html的HTML文件。

register.html文件的内容如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Register</title>
</head>
<body>
    <h1>Register</h1>
    <form method="POST" action="{{ url_for('register') }}">
        {{ form.hidden_tag() }}
        {{ form.username.label }} {{ form.username }}
        <br>
        {{ form.password.label }} {{ form.password }}
        <br>
        {{ form.confirm_password.label }} {{ form.confirm_password }}
        <br>
        {{ form.submit }}
    </form>
</body>
</html>

在上面的代码中,我们使用Flask提供的url_for函数来生成一个指向注册视图函数的URL。然后,我们使用模板引擎的{{}}语法将表单的各个字段呈现为HTML元素。

到目前为止,我们已经完成了注册页面的编写。你可以通过运行以下命令启动该应用程序:

python app.py

然后通过访问http://localhost:5000/register来进行测试。

# 编写登录页面

接下来,我们将编写一个登录页面,用户可以使用已注册的账户登录。登录页面的工作原理与注册页面类似,只是我们需要将用户提供的登录凭证与数据库中的凭证进行验证。

首先,我们需要创建一个新的表单类来接收用户的用户名和密码:

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

然后,我们需要创建一个处理登录请求的视图函数:

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        # 处理用户的登录逻辑
        return redirect(url_for('dashboard'))
    return render_template('login.html', form=form)

在上面的代码中,与注册页面的视图函数类似,我们首先实例化表单类,并将其传递给登录页面的模板。然后,我们使用validate_on_submit()方法来确定用户是否已经提交了表单。如果是,则处理用户的登录逻辑,并重定向到仪表板页面。否则,渲染并返回登录页的模板。

最后,我们将创建一个新的HTML模板文件,用于呈现登录页面的表单。在templates文件夹中创建名为login.html的HTML文件。

login.html文件的内容如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form method="POST" action="{{ url_for('login') }}">
        {{ form.hidden_tag() }}
        {{ form.username.label }} {{ form.username }}
        <br>
        {{ form.password.label }} {{ form.password }}
        <br>
        {{ form.submit }}
    </form>
</body>
</html>

到目前为止,我们已经完成了登录页面的编写。你可以通过运行以下命令启动应用程序,并通过访问http://localhost:5000/login来进行测试。

python app.py

# 添加验证逻辑

在我们进入下一步之前,我们需要添加验证逻辑,以检查用户提供的用户名和密码是否正确。

首先,我们将创建一个名为users的Python字典,用于模拟用户数据库。你可以根据需要添加或更改字典中的用户记录。

users = {'admin': 'admin123', 'user': 'user123'}

然后,我们将在处理登录请求的视图函数中添加验证逻辑:

`python

@app.route('/login', methods=['GET', 'POST'])

def login():

form = LoginForm()

if form.validate_on_submit():

username = form.username.data

password = form.password.data

if username in users and users[username] == password:

return redirect(url