pu369com

试用deepseek写个简单web服务项目,确实够聪明。如果再有了智慧和情感,是不是要替代碳基生物了?

提问:

请用python flask sqlite写一个http server项目,要求生成以下2个python文件和1个数据库文件,以及2个html模板:其中,1、项目入口文件app.py,作用是启动http服务,提供用户登录界面index.html;同时,如果不存在db.sqlite数据库,则调用db.py初始化生成db.sqlite数据库;2、db.py,作用是初始化生成db.sqlite数据库,数据库中有user数据表,数据表有username和password两个字段,两个字段对应的一条记录为admin 和123,以及对数据库进行CRUD操作功能;3、用户登录后跳转到userlist.html,可在网页上对user数据表进行CRUD操作。

 

回答:

 以下是按照您的要求创建的项目文件结构及代码:

  1. app.py

python
复制
from flask import Flask, render_template, request, redirect, url_for, session
import sqlite3
import os
import db

app = Flask(__name__)
app.secret_key = 'your_secret_key_here'

# 初始化数据库
if not os.path.exists('db.sqlite'):
    db.init_db()

@app.route('/', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        if db.check_user(username, password):
            session['username'] = username
            return redirect(url_for('userlist'))
        return render_template('index.html', error='Invalid credentials')
    return render_template('index.html')

@app.route('/userlist')
def userlist():
    if 'username' not in session:
        return redirect(url_for('login'))
    users = db.get_users()
    return render_template('userlist.html', users=users)

@app.route('/add', methods=['POST'])
def add_user():
    if 'username' not in session:
        return redirect(url_for('login'))
    username = request.form['new_username']
    password = request.form['new_password']
    db.add_user(username, password)
    return redirect(url_for('userlist'))

@app.route('/edit', methods=['POST'])
def edit_user():
    if 'username' not in session:
        return redirect(url_for('login'))
    old_username = request.form['old_username']
    new_username = request.form['new_username']
    new_password = request.form['new_password']
    db.update_user(old_username, new_username, new_password)
    return redirect(url_for('userlist'))

@app.route('/delete/<username>')
def delete_user(username):
    if 'username' not in session:
        return redirect(url_for('login'))
    db.delete_user(username)
    return redirect(url_for('userlist'))

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

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

python
复制
import sqlite3

def get_connection():
    return sqlite3.connect('db.sqlite')

def init_db():
    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS users (
            username TEXT PRIMARY KEY,
            password TEXT NOT NULL
        )
    ''')
    cursor.execute("INSERT OR IGNORE INTO users VALUES (?, ?)", ('admin', '123'))
    conn.commit()
    conn.close()

def check_user(username, password):
    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password))
    user = cursor.fetchone()
    conn.close()
    return user is not None

def get_users():
    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users")
    users = cursor.fetchall()
    conn.close()
    return users

def add_user(username, password):
    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute("INSERT INTO users VALUES (?, ?)", (username, password))
    conn.commit()
    conn.close()

def update_user(old_username, new_username, new_password):
    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute("UPDATE users SET username=?, password=? WHERE username=?", 
                 (new_username, new_password, old_username))
    conn.commit()
    conn.close()

def delete_user(username):
    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute("DELETE FROM users WHERE username=?", (username,))
    conn.commit()
    conn.close()
  1. templates/index.html

html
复制
<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    {% if error %}
        <p style="color: red">{{ error }}</p>
    {% endif %}
    <form method="POST">
        <label>Username:</label>
        <input type="text" name="username" required><br>
        <label>Password:</label>
        <input type="password" name="password" required><br>
        <button type="submit">Login</button>
    </form>
</body>
</html>
  1. templates/userlist.html

html
复制
<!DOCTYPE html>
<html>
<head>
    <title>User Management</title>
</head>
<body>
    <h1>Welcome {{ session['username'] }}! <a href="{{ url_for('logout') }}">Logout</a></h1>
    
    <h2>Add User</h2>
    <form method="POST" action="{{ url_for('add_user') }}">
        <input type="text" name="new_username" placeholder="Username" required>
        <input type="password" name="new_password" placeholder="Password" required>
        <button type="submit">Add User</button>
    </form>

    <h2>User List</h2>
    <table border="1">
        <tr>
            <th>Username</th>
            <th>Password</th>
            <th>Actions</th>
        </tr>
        {% for user in users %}
        <tr>
            <form method="POST" action="{{ url_for('edit_user') }}">
                <td>
                    <input type="hidden" name="old_username" value="{{ user[0] }}">
                    <input type="text" name="new_username" value="{{ user[0] }}">
                </td>
                <td>
                    <input type="text" name="new_password" value="{{ user[1] }}">
                </td>
                <td>
                    <button type="submit">Edit</button>
                    <a href="{{ url_for('delete_user', username=user[0]) }}">Delete</a>
                </td>
            </form>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

使用方法:

  1. 创建项目文件夹并进入

  2. 创建templates子文件夹

  3. 将上述代码保存到对应文件中

  4. 安装依赖:pip install flask

  5. 运行应用:python app.py

访问 http://localhost:5000 即可使用系统,初始管理员账号:admin/123

功能说明:

  1. 登录验证

  2. 用户列表显示

  3. 添加新用户

  4. 编辑现有用户

  5. 删除用户

  6. 退出登录

  7. 自动创建数据库

  8. 会话管理

注意:这是基础实现版本,实际生产环境需要增加密码加密、输入验证、错误处理、CSRF保护等安全措施。

posted on 2025-03-21 10:43  pu369com  阅读(28)  评论(0)    收藏  举报

导航