Python的Flask框架中实现简单的登录功能的教程

yizhihongxing

下面是详细讲解"Python的Flask框架中实现简单的登录功能的教程"的完整攻略。

前置知识

在学习本教程之前,需要对以下技术有一定的了解:
- Python基础知识
- Flask框架基础知识
- HTML/CSS/JS基础知识

步骤一:准备

  1. 安装Python(建议使用3.6以上版本),并安装pip包管理工具。
  2. 通过pip安装Flask框架:pip install Flask
  3. 创建一个文件夹作为项目文件,命名为flask-login,并在命令行进入该文件夹内。
  4. 在该文件夹内创建一个名为app.py的文件,并创建一个名为templates的文件夹。

步骤二:编写代码

1. 导入所需的模块

在app.py文件开头,导入所需的模块。

from flask import Flask, render_template, request, session, redirect, url_for
import os

2. 创建Flask实例

在导入所需模块后,创建Flask实例。

app = Flask(__name__)

3. 配置SESSION_KEY

为了加强安全性,需要给信息加密。为了实现这一点,我们需要配置SESSION_KEY。我们可以使用随机字符串来进行加密。

app.secret_key = os.urandom(24)

4. 确定主页路由

为主页设置路由,下面的例子为"/"。

@app.route('/')
def home():
    if 'username' in session:
        return render_template('home.html', username=session['username'])
    return redirect(url_for('login'))

5. 确定登录路由

为登录设置路由,下面的例子为"/login"。这里我们期望用户填写用户名和密码,如果用户名和密码正确,则会存储会话和重定向到主页。

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        if username == 'admin' and password == 'admin':
            session['username'] = username
            return redirect(url_for('home'))
    return render_template('login.html')

6. 确定登出路由

为退出设置路由,下面的例子为"/logout"。在这里,会话会被清除,用户将被重定向到登录页面。

@app.route('/logout')
def logout():
    session.pop('username', None)
    return redirect(url_for('login'))

7. 编写HTML模板

最后,我们需要编写三个HTML模板:home.html、login.html和base.html。base.html是公共的HTML模板,可以由所有页面使用。login.html用于用户登录页面;home.html用于用户登陆后进入的主页面。

步骤三:运行程序

在命令行中,输入"python app.py",程序将运行在localhost:5000地址上。此时,在您的浏览器输入该地址,您应该可以看到一个简单的登录页面。 输入用户名admin和密码admin,您将被重定向到主页,您的用户名也应该显示在主页上。同时,单击"退出"按钮会使您退出并重新跳转到登录页面。

示例一:在本地文件中存储用户名和密码

在上面的例子中,我们使用了硬编码的用户名和密码。但是,在一个实际的应用程序中,用户名和密码通常存储在本地数据库或文件中。下面我们将阐述如何将用户名和密码存储在文件中。

  1. 创建一个文本文件,将其命名为users.txt,并将其保存在项目目录中。
  2. 在users.txt中添加如下条目
admin:adminpass
test:testpass
  1. 编写一些代码来读取users.txt文件,并将其存储为字典users。
def read_users():
    users = {}
    with open('users.txt') as f:
        for line in f:
            line = line.strip()
            if not line:
                continue
            username, password = line.split(':')
            users[username] = password
    return users

users = read_users()
  1. 修改login路由的代码,从users字典中检索用户名和密码,并将会话存储到session中。
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        if username in users and users[username] == password:
            session['username'] = username
            return redirect(url_for('home'))
    return render_template('login.html')

请注意,我们将users字典作为全局变量存储,这不是一个很好的设计,但它演示了如何将用户名和密码存储在文件中,然后从文件读取。

示例二:使用数据库存储用户名和密码

在本示例中,我们将向您展示如何将用户名和密码存储在SQLite数据库中。我们将使用Python中的sqlite3模块来实现此功能。

  1. 通过pip安装sqlite3:pip install sqlite3
  2. 在项目文件夹中创建一个名为flask-login.db的SQLite数据库文件。
  3. 在Python中,连接我们需要导入sqlite3模块并使用connect方法
import sqlite3

conn = sqlite3.connect('flask-login.db')
  1. 创建一个名为users的表,并将用户名和密码存储在其中。
def create_table():
    with conn:
        conn.execute('''CREATE TABLE IF NOT EXISTS users
        (id INTEGER PRIMARY KEY,
        username TEXT NOT NULL,
        password TEXT NOT NULL);''')
        conn.commit()

def add_user(username, password):
    with conn:
        conn.execute("INSERT INTO users(username, password) VALUES (?,?)", (username,password))
        conn.commit()

create_table()
add_user('admin', 'adminpass')
add_user('test', 'testpass')
  1. 基于上面的修改,以下展示完整的代码。
from flask import Flask, render_template, request, session, redirect, url_for
import os
import sqlite3

app = Flask(__name__)
app.secret_key = os.urandom(24)

def create_table():
    with conn:
        conn.execute('''CREATE TABLE IF NOT EXISTS users
        (id INTEGER PRIMARY KEY,
        username TEXT NOT NULL,
        password TEXT NOT NULL);''')
        conn.commit()

def add_user(username, password):
    with conn:
        conn.execute("INSERT INTO users(username, password) VALUES (?,?)", (username,password))
        conn.commit()

def read_user(username):
    with conn:
        cur = conn.execute("SELECT password FROM users WHERE username=?", (username,))
        row = cur.fetchone()
        if row:
            return row[0]
        return None

@app.route('/')
def home():
    if 'username' in session:
        return render_template('home.html', username=session['username'])
    return redirect(url_for('login'))

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        if read_user(username) == password:
            session['username'] = username
            return redirect(url_for('home'))
    return render_template('login.html')

@app.route('/logout')
def logout():
    session.pop('username', None)
    return redirect(url_for('login'))

conn = sqlite3.connect('flask-login.db')

if __name__ == '__main__':
    create_table()
    add_user('admin', 'adminpass')
    add_user('test', 'testpass')
    app.run(debug=True)

结论

这两个示例是实现Flask框架中的简单登录功能的基本方法之一。第一个示例演示了在本地文件中存储用户名和密码;第二个示例演示了如何在Python中使用SQLite数据库存储用户名和密码。您可以使用这些示例代码来构建具有不同用途的登录功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python的Flask框架中实现简单的登录功能的教程 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Flask框架单例模式实现方法详解

    Flask框架单例模式实现方法详解 什么是单例模式? 单例模式是一种创建型设计模式,它能够确保某个类只有一个实例,并提供一个全局的访问点。在许多情况下,单例模式能够有效地降低系统中的代码重复和资源消耗。 Flask框架中单例模式的应用 在Flask框架应用开发中,我们经常需要使用一些单例对象,例如数据库连接对象、配置对象等。为了保证对这些单例对象的访问是线程…

    Flask 2023年5月15日
    00
  • Flask + MySQL如何实现用户注册,登录和登出的项目实践

    Flask是一款轻量级的Web框架,非常方便快捷。MySQL则是一款常用的数据库,两者结合可以实现很多有趣的项目。本文将介绍如何使用Flask和MySQL实现用户注册、登录和登出功能的项目实践。 准备工作 在开始项目之前,我们需要准备一些工具和环境: Python环境:Flask是Python编写的Web框架,我们首先需要安装Python环境。 Flask框…

    Flask 2023年5月16日
    00
  • 使用Django和Flask获取访问来源referrer

    获取访问来源referrer是一个很有用的功能,它可以让我们查看访问者是从哪个页面跳转而来。在Django和Flask中,获取referrer的方法也是不同的,下面我会分别提供两个完整的攻略来实现这个功能。 Django中获取referrer的方法 Django中获取referrer的方法比较简单,我们直接在视图函数中获取request.META属性中的HT…

    Flask 2023年5月16日
    00
  • python3-flask-3将信息写入日志的实操方法

    下面我来详细讲解“python3-flask-3将信息写入日志的实操方法”的完整攻略。 1. 简介 在Flask应用程序中,日志可以帮助我们快速找到应用程序的问题。在日志中记录的对应的信息,有助于我们更快的定位问题并进行修复。在本文中,我们将会详细介绍如何将信息写入日志。在实现本案例时,我们会使用Python3、Flask框架,下面是示例代码。 2. 实现 …

    Flask 2023年5月15日
    00
  • 详解 python logging日志模块

    详解 Python logging 日志模块 简介 Python logging 模块是一个强大且灵活的记录日志的模块,它允许你在你的 Python 应用程序中执行大规模的日志记录,并在日志消息的不同级别中进行分类和过滤。使用 Python logging 模块可以有效地记录调试信息、错误和异常信息、警告、信息等。 Python logging 模块支持以下…

    Flask 2023年5月16日
    00
  • Python Flask框架实现Proteus仿真Arduino与网页数据交互

    让我为您提供一份详细的攻略,来实现Python Flask框架实现Proteus仿真Arduino与网页数据交互。 安装Proteus和Arduino IDE 首先,您需要安装Proteus仿真软件和Arduino IDE开发环境,这样才能进行电路仿真和代码编写。您可以根据自己的操作系统下载合适的安装包进行安装。 准备硬件 接下来,您需要准备一块Arduin…

    Flask 2023年5月16日
    00
  • python中的信号通信 blinker的使用小结

    标题:Python中的信号通信 blinker的使用小结 什么是blinker? blinker 是一个简单的 Python 库,作用是用于处理事件的发布和订阅。它提供了一个 Signal 类型,用于将函数连接到一个事件源上,并在该事件源发布事件时自动触发对应的函数。 安装blinker 首先需要安装 blinker 库,在命令行中使用 pip 命令进行安装…

    Flask 2023年5月16日
    00
  • flask应用部署到服务器的方法

    将一个 Flask 应用程序部署到服务器需要经过以下步骤: 准备服务器 首先,需要一台运行 Linux 的服务器。推荐使用 Ubuntu 或 CentOS 等流行的 Linux 发行版,并进行更新。 安装 Flask 要在服务器上运行 Flask 应用,需要在服务器上安装 Flask。可以使用 pip 来安装 Flask: $ sudo pip instal…

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