用Python实现web端用户登录和注册功能的教程

下面我详细讲解一下该攻略。

用Python实现web端用户登录和注册功能的教程

什么是web端用户登录和注册功能

在一个基于web的应用程序中,用户登录和注册是非常常见的功能。用户登录指的是注册用户输入他们的用户名和密码,然后被应用程序验证以进入系统。用户注册是指一个未注册用户输入必要的信息,并在成功验证后创建一个新的帐户。

用到的技术

为了实现用户登录和注册,需要使用以下技术:

  1. Flask: 一个Python web框架,用于构建web应用程序。
  2. SQLAlchemy: 一个Python的SQL工具包,用于与数据库进行交互。
  3. WTForms: 一个用于创建web表单的Python库。

步骤

下面是实现web端用户登录和注册功能的攻略,包括以下步骤:

步骤1:安装必要的Python库

在命令行中运行以下命令以安装必要的Python库:

pip install flask sqlalchemy flask_sqlalchemy wtforms flask_wtf werkzeug

步骤2:创建Flask应用程序

在项目文件夹中创建一个名为app.py的文件,并将以下代码复制到其中:

from flask import Flask, render_template, request, url_for, redirect, flash
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hash
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import InputRequired, EqualTo, Length

app = Flask(__name__)
app.config['SECRET_KEY'] = 'thisisasecretkey'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'

db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(15), unique=True)
    email = db.Column(db.String(50), unique=True)
    password = db.Column(db.String(80))

class RegisterForm(FlaskForm):
    username = StringField('Username', validators=[InputRequired(), Length(min=4, max=15)])
    email = StringField('Email', validators=[InputRequired(), Length(max=50)])
    password = PasswordField('Password', validators=[InputRequired(), Length(min=8, max=80), EqualTo('confirm', message='Passwords must match')])
    confirm = PasswordField('Confirm Password', validators=[InputRequired(), Length(min=8, max=80)])
    submit = SubmitField('Register')

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[InputRequired(), Length(min=4, max=15)])
    password = PasswordField('Password', validators=[InputRequired(), Length(min=8, max=80)])
    submit = SubmitField('Login')

@app.route('/', methods=['GET', 'POST'])
def index():
    register_form = RegisterForm()
    login_form = LoginForm()

    if request.method == 'POST' and register_form.validate_on_submit():
        hashed_password = generate_password_hash(register_form.password.data, method='sha256')
        new_user = User(username=register_form.username.data, email=register_form.email.data, password=hashed_password)
        db.session.add(new_user)
        db.session.commit()
        flash('Your account has been created!', 'success')

    if request.method == 'POST' and login_form.validate_on_submit():
        user = User.query.filter_by(username=login_form.username.data).first()
        if user and check_password_hash(user.password, login_form.password.data):
            flash('You have been logged in!', 'success')
            return redirect(url_for('dashboard'))
        else:
            flash('Invalid username or password.', 'danger')

    return render_template('index.html', register_form=register_form, login_form=login_form)

@app.route('/dashboard')
def dashboard():
    return 'This is the dashboard'

if __name__ == '__main__':
    db.create_all()
    app.run(debug=True)

步骤3:创建HTML模板

在项目文件夹中创建一个名为templates的文件夹,并在其中创建一个名为index.html的文件,并将以下代码复制到其中:

<!DOCTYPE html>
<html>
<head>
    <title>Web Application Example</title>
</head>
<body>
    <h1>Welcome to our web application</h1>
    <h2>Register</h2>
    {% with messages = get_flashed_messages() %}
        {% if messages %}
            {% for message in messages %}
                <div class="alert alert-{{ message[0] }}">{{ message[1] }}</div>
            {% endfor %}
        {% endif %}
    {% endwith %}
    <form method="POST" action="/">
        {{ register_form.hidden_tag() }}
        <div>
            {{ register_form.username.label }} {{ register_form.username }}
        </div>
        <div>
            {{ register_form.email.label }} {{ register_form.email }}
        </div>
        <div>
            {{ register_form.password.label }} {{ register_form.password }}
        </div>
        <div>
            {{ register_form.confirm.label }} {{ register_form.confirm }}
        </div>
        <div>
            {{ register_form.submit }}
        </div>
    </form>
    <h2>Login</h2>
    {% with messages = get_flashed_messages() %}
        {% if messages %}
            {% for message in messages %}
                <div class="alert alert-{{ message[0] }}">{{ message[1] }}</div>
            {% endfor %}
        {% endif %}
    {% endwith %}
    <form method="POST" action="/">
        {{ login_form.hidden_tag() }}
        <div>
            {{ login_form.username.label }} {{ login_form.username }}
        </div>
        <div>
            {{ login_form.password.label }} {{ login_form.password }}
        </div>
        <div>
            {{ login_form.submit }}
        </div>
    </form>
</body>
</html>

步骤4:启动应用程序

在命令行中运行以下命令以启动应用程序:

python app.py

现在你可以在网页浏览器中访问http://localhost:5000/来测试Web应用程序了。包括用户注册和登录功能。

示例

下面是两个例子:

示例1:用户登录

假设你的用户名和密码是:username: alicepassword: password123。那么你可以这么测试登录功能:

  1. 在首页的登录表单中输入你的用户名和密码。
  2. 点击“Login”按钮。
  3. 如果用户名和密码都正确,就会在页面中看到一个绿色的通知消息告诉你已经成功登录了。
  4. 点击页面上的“Dashboard”链接就可以进入用户的控制面板了。

示例2:用户注册

  1. 在首页的注册表单中输入一个新的用户名和电子邮件地址。
  2. 设置一个强密码并确认密码。
  3. 点击"Register"按钮。
  4. 如果你的用户名和电子邮件地址都是新的,那么就会在页面上看到一个绿色的通知消息告诉你账户已创建成功。

本攻略完结。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用Python实现web端用户登录和注册功能的教程 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python处理圆角图片、圆形图片的例子

    处理圆角图片和圆形图片是图片处理中比较常见的需求,在Python中也有很多方法来实现这个功能,下面我将为您提供完整的攻略。 处理圆角图片 方法一:Pillow库 Pillow库是Python中的一款图像处理库,它可以方便地处理图片,其中包括处理圆角图片的功能。 示例代码如下: from PIL import Image, ImageDraw def roun…

    python 2023年5月19日
    00
  • Python表示矩阵的方法分析

    Python表示矩阵的方法分析 在Python中,我们可以使用多种方法来表示矩阵,包括列表、NumPy数组、SciPy稀疏矩阵等。针对不同的场景,我们可以选择不同的表示方法。 使用Python列表表示矩阵 Python列表是最基本的数据结构,可以用来表示矩阵。对于一个$m \times n$的矩阵,我们可以用一个m维的列表来表示矩阵的每一行,用n维的子列表来…

    python 2023年6月5日
    00
  • 如何使用带有密码而不是密钥文件的python sshtunnel

    【问题标题】:How to use python sshtunnel with password instead of key file如何使用带有密码而不是密钥文件的python sshtunnel 【发布时间】:2023-04-07 12:36:01 【问题描述】: 我想从我的本地机器打开一个 ssh 隧道,以将我的 python 脚本连接到远程数据库。…

    Python开发 2023年4月8日
    00
  • 基于Python实现人像雪景小程序

    这里是基于Python实现人像雪景小程序完整攻略。 简介 本攻略将介绍如何基于Python实现人像雪景小程序,能够将输入的照片中的人像抠出来并添加上雪景效果。这个小程序的实现会涉及到以下技术: Python图片处理库PIL(Python Imaging Library) 神经网络模型MMDetection 算法OpenCV 实施步骤 步骤1:环境准备 为了实…

    python 2023年5月23日
    00
  • Python中类型检查的详细介绍

    正文如下: Python中类型检查的详细介绍 在Python中,类型检查是指对变量和函数参数类型的检查。Python是一门动态类型的语言,这种语言的变量数据类型是在运行时确定的。但是,由于Python拥有很强大的内置函数和标准库,因此类型检查仍然是很重要的。 Python中的类型注解 在Python3.5之后,Python引入了类型注解(Type hints…

    python 2023年6月3日
    00
  • tensorflow安装成功import tensorflow 出现问题

    当我们成功安装tensorflow之后,我们需要验证一下是否能够正确的导入tensorflow模块。但是有时候会出现一些问题,如出现错误信息:No module named ‘tensorflow’,那么如何解决呢? 以下是针对“tensorflow安装成功import tensorflow出现问题”的完整攻略: 1. 确认tensorflow是否安装成功 …

    python 2023年5月13日
    00
  • Python 列表(List) 的三种遍历方法实例 详解

    Python中的列表(List)是一种常用的数据类型,可以存储多个元素。本文将详细讲解Python中列表的三种遍历方法,包括for循环遍历、while循环遍历和列表推导式,并提供两个实例说明。 for循环遍历 使用for循环遍历列表是常见的方法。可以使用in关键字来遍历列表中的每个元素。例如: my_list = [1, 2, 3, 4, 5] for el…

    python 2023年5月13日
    00
  • python字符串的常用操作方法小结

    Python字符串的常用操作方法小结 在Python中,字符串是一种基本的数据类型,它是由一系列字符组成的不可变的序列,可以用单引号、双引号或三引号括起来。在Python中,字符串是非常常见的一种数据类型,因此字符串的操作显得非常重要。本文将介绍Python字符串的常用操作方法。 创建字符串 创建字符串最常用的方式是用单引号、双引号或三引号括起来,例如: s…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部