1、用户明细页面
2、创建用户界面
3-用户详情与修改删除页面
业务逻辑代码
from flask import Flask, request, render_template, url_for, redirect
import sqlite3
app = Flask(__name__)
def create_table():
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
email TEXT,
password TEXT)''')
conn.commit()
# 生成10条测试数据
# for i in range(1, 11):
# name = f'用户{i}'
# email = f'user{i}@example.com'
# password = f'password{i}'
# cursor.execute("INSERT INTO users (name, email, password) VALUES (?, ?, ?)", (name, email, password))
# conn.commit()
@app.route('/api/users-get', methods=['GET'])
def get_users():
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
conn.commit()
return render_template('users.html', users=rows)
@app.route('/create-user', methods=['GET'])
def render_create_user():
return render_template('create_user.html')
@app.route('/api/users-create', methods=['POST'])
def create_user():
name = request.form['name']
email = request.form['email']
password = request.form['password']
cursor = conn.cursor()
cursor.execute("INSERT INTO users (name, email, password) VALUES (?, ?, ?)", (name, email, password))
user_id = cursor.lastrowid
conn.commit()
return redirect(url_for('show_user', user_id=user_id))
@app.route('/user/<int:user_id>')
def show_user(user_id):
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE id=?", (user_id,))
user = cursor.fetchone()
return render_template('user_detail.html', user=user)
@app.route('/api/users/get/<int:user_id>', methods=['GET'])
# @app.route('/api/users/get/<int:user_id>')
def get_user(user_id):
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
row = cursor.fetchone()
if row is None:
return f"找不到ID为{user_id}的用户"
else:
return render_template('user_detail.html', user=row)
@app.route('/api/users/update/<int:user_id>', methods=['GET', 'POST'])
def update_user(user_id):
name = request.form['name']
email = request.form['email']
password = request.form['password']
cursor = conn.cursor()
cursor.execute("UPDATE users SET name = ?, email = ?, password = ? WHERE id = ?", (name, email, password, user_id))
conn.commit()
return render_template('update_result.html', user_id=user_id, name=name, email=email, password=password)
@app.route('/api/users/delete/<int:user_id>', methods=['GET', 'POST'])
def delete_user(user_id):
cursor = conn.cursor()
cursor.execute("DELETE FROM users WHERE id = ?", (user_id,))
conn.commit()
return render_template('delete_result.html', user_id=user_id)
@app.teardown_appcontext
def close_connection(exception):
conn = sqlite3.connect('database.db')
conn.close()
'''
这段代码是在 Flask 应用的 teardown_appcontext 装饰器中定义了一个函数,用于在每个请求处理完成后关闭数据库连接。
teardown_appcontext 装饰器会在应用上下文被销毁时调用注册的函数。
在 Flask 中,应用上下文是指每个请求的处理过程中创建的上下文环境,其中包含了一些请求的信息和全局对象。
当请求处理完成后,应用上下文会被销毁。
在你给出的代码中,teardown_appcontext 装饰器将 close_connection 函数注册为应用上下文被销毁时调用的函数。
在这个函数中,它创建了一个数据库连接 conn 并关闭了它。
通过这样的设置,在每个请求处理完成后,数据库连接都会被正确地关闭,避免了潜在的资源泄漏问题。
'''
if __name__ == '__main__':
conn = sqlite3.connect('database.db',check_same_thread=False)
create_table()
app.run(host='0.0.0.0', port=5000)
完整代码: