📜  在Python使用 PyWebIO 模块创建注册表(1)

📅  最后修改于: 2023-12-03 15:37:38.739000             🧑  作者: Mango

使用 PyWebIO 模块创建注册表

什么是 PyWebIO

PyWebIO 是一个 Python 库,旨在通过 Web 浏览器提供一致且简单的方式来执行交互式输入和输出。它支持在不需要任何 HTML、CSS 或 JavaScript 代码的情况下创建交互式 Web 界面。

为什么要使用 PyWebIO

在 Python 中创建交互式 Web 界面的传统方法通常需要使用多种库来处理 HTML、CSS 和 JavaScript,这样会让代码变得复杂,难以维护。

而 PyWebIO 利用 Python 的高级特性,使得用户可以使用异步 I/O,以同步的编程风格编写异步 Web 应用。允许创建交互式的 Web 应用程序,而无需了解 HTML、CSS 或 JavaScript。

创建注册表

在本示例中,我们将使用 PyWebIO 模块创建一个简单的注册表,并使用 SQLite 数据库在后端存储和检索数据。以下是完整的代码:

from pywebio import start_server
from pywebio.input import *
from pywebio.output import *
import sqlite3

DB_NAME = 'user.db'
CREATE_TABLE_QUERY = """
CREATE TABLE IF NOT EXISTS Users(
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT NOT NULL UNIQUE,
    password TEXT NOT NULL
)
"""


def create_table():
    with sqlite3.connect(DB_NAME) as conn:
        cur = conn.cursor()
        cur.execute(CREATE_TABLE_QUERY)


def insert_user(name, email, password):
    with sqlite3.connect(DB_NAME) as conn:
        cur = conn.cursor()
        cur.execute("INSERT INTO Users(name, email, password) VALUES (?, ?, ?)", (name, email, password))
        conn.commit()


def check_user(email, password):
    with sqlite3.connect(DB_NAME) as conn:
        cur = conn.cursor()
        cur.execute("SELECT * FROM Users WHERE email = ? AND password = ?", (email, password))
        return cur.fetchone()


def register():
    name = input("请输入您的姓名:", required=True)
    email = input("请输入您的电子邮件地址:", required=True, type=email)
    password = input("请输入您的密码:", required=True, type=PASSWORD)

    try:
        insert_user(name, email, password)
        toast("注册成功!", color="success")
    except sqlite3.IntegrityError:
        toast("该电子邮件地址已注册,请重试。", color="error")


def login():
    email = input("请输入您的电子邮件地址:", required=True, type=email)
    password = input("请输入您的密码:", required=True, type=PASSWORD)

    user = check_user(email, password)
    if user:
        toast("登录成功!", color="success")
    else:
        toast("用户名或密码不正确,请重试。", color="error")


if __name__ == '__main__':
    create_table()
    register_button = Button('注册', onclick=register)
    login_button = Button('登录', onclick=login)

    while True:
        put_markdown('# 欢迎使用注册表')
        put_buttons([register_button, login_button])
        # pywebio.start_server(...): Run the PyWebIO application
        # port=8080: Open in the browser at http://localhost:8080/
        # debug=False: Turn off debug mode. Turn it on to help with debugging applications
        start_server(main, port=8080, debug=False)

在上面的代码中,我们使用了 PyWebIO 的 input 和 output 函数来创建输入和输出元素。具体来说,我们使用了以下函数:

  • input():用于获取用户输入的数据。在示例中,我们使用它来获取用户的姓名、电子邮件地址和密码。
  • output():用于将结果返回给用户。在示例中,我们使用它来将注册表的欢迎消息和两个按钮显示给用户。
  • put_markdown():用于将 Markdown 格式的消息显示给用户。
  • put_buttons():用于在页面上放置一个或多个按钮。

在 PyWebIO 中,start_server() 函数是必须的,它定义了主函数。 更具体来说,它使应用程序在 localhost 的给定端口上运行。 在代码中,主函数是 main()

对于此示例,我们创建了一个用户表,其包括 Name,Email和Password。我们在主函数中为用户提供了两个选项,要么注册,要么登录。

在注册时,用户将被要求输入姓名,电子邮件地址和密码。如果电子邮件地址是唯一的,用户数据将被插入到数据库中。 如果插入失败,我们向用户提示注册失败提示消息。

在登录时,使用输入的电子邮件地址和密码从数据库中检索用户数据。 如果检索到用户,则向用户显示登录成功消息。 反之,则向用户显示登录失败消息。

结论

在本文中,我们看到了如何使用 PyWebIO 模块创建一个简单的注册表,并使用 SQLite 数据库在后端存储和检索数据。这个例子展示了 PyWebIO 的基本功能,以及如何在 Python 中创建交互式 Web 应用程序。