谁能告诉我!!!!!!!!

博客内容主要是询问某物品的品牌以及视频的格式,但未明确指出具体物品。

 谁能告诉我!!!!!!!!它是吗牌子的?再!有视频是格式的!!!!!

当然可以!下面我将为你提供 **完整可运行的博客网站代码**,它基于 Python + Flask 构建,功能完全符合你的需求: ✅ 你作为管理员(`admin`) ✅ 所有人可注册、登录、投稿 ✅ 所有文章需管理员审核才能发布 ✅ 管理员可封号、删除文章 ✅ 主页面展示已发布的文章 ✅ 使用 SQLite 数据库存储数据 ✅ 密码加密存储(使用 `bcrypt`) 你可以直接复制这些代码到 [Replit](https://replit.com) 上运行! --- ## 🚀 第一步:项目结构 你需要创建以下文件: ``` . ├── main.py # 主程序 ├── requirements.txt # 依赖库 ├── templates/ # HTML 模板 │ ├── index.html # 首页 │ ├── login.html # 登录页 │ ├── register.html # 注册页 │ ├── submit.html # 投稿页 │ ├── moderate.html # 审核中心 │ └── post.html # 文章详情页 └── data.db # 自动生成的数据库(无需手动创建) ``` --- ## 🔧 第二步:依赖文件 `requirements.txt` ```txt Flask bcrypt sqlite3 ``` > ✅ 这会告诉 Replit 自动安装所需库。 --- ## 💻 第三步:主程序 `main.py` ```python import sqlite3 import bcrypt from flask import Flask, request, redirect, render_template, session, url_for app = Flask(__name__) app.secret_key = 'your-secret-key-here' # 可以随便写,用于会话加密 # 初始化数据库 def init_db(): with sqlite3.connect("data.db") as conn: c = conn.cursor() # 用户表 c.execute('''CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL, is_banned INTEGER DEFAULT 0 )''') # 文章表(待审核) c.execute('''CREATE TABLE IF NOT EXISTS submissions ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, content TEXT, author_id INTEGER, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (author_id) REFERENCES users(id) )''') # 已发布文章表 c.execute('''CREATE TABLE IF NOT EXISTS posts ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, content TEXT, author_id INTEGER, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (author_id) REFERENCES users(id) )''') conn.commit() # 获取当前登录用户 def get_current_user(): if 'user_id' not in session: return None with sqlite3.connect("data.db") as conn: c = conn.cursor() c.execute("SELECT * FROM users WHERE id=? AND is_banned=0", (session['user_id'],)) return c.fetchone() # 判断是否为管理员 def is_admin(): user = get_current_user() return user and user[1] == 'admin' @app.route('/') def index(): with sqlite3.connect("data.db") as conn: c = conn.cursor() c.execute(''' SELECT p.id, p.title, p.created_at, u.username FROM posts p JOIN users u ON p.author_id = u.id ORDER BY p.created_at DESC ''') posts = c.fetchall() user = get_current_user() return render_template('index.html', posts=posts, user=user) @app.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'POST': username = request.form['username'] password = request.form['password'].encode('utf-8') with sqlite3.connect("data.db") as conn: c = conn.cursor() c.execute("SELECT * FROM users WHERE username=?", (username,)) if c.fetchone(): return "用户名已存在!", 400 hashed = bcrypt.hashpw(password, bcrypt.gensalt()) c.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, hashed)) conn.commit() return redirect(url_for('login')) return render_template('register.html') @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'].encode('utf-8') with sqlite3.connect("data.db") as conn: c = conn.cursor() c.execute("SELECT * FROM users WHERE username=?", (username,)) user = c.fetchone() if not user: return "用户不存在或密码错误", 400 if user[3] == 1: # 被封禁 return "此账户已被永久封禁", 403 if bcrypt.checkpw(password, user[2].encode('utf-8')): session['user_id'] = user[0] return redirect(url_for('index')) else: return "用户不存在或密码错误", 400 return render_template('login.html') @app.route('/logout') def logout(): session.pop('user_id', None) return redirect(url_for('index')) @app.route('/submit', methods=['GET', 'POST']) def submit(): user = get_current_user() if not user: return redirect(url_for('login')) if request.method == 'POST': title = request.form['title'] content = request.form['content'] with sqlite3.connect("data.db") as conn: c = conn.cursor() c.execute("INSERT INTO submissions (title, content, author_id) VALUES (?, ?, ?)", (title, content, user[0])) conn.commit() return redirect(url_for('index')) return render_template('submit.html') @app.route('/moderate') def moderate(): if not is_admin(): return "权限不足", 403 with sqlite3.connect("data.db") as conn: c = conn.cursor() c.execute(''' SELECT s.id, s.title, s.content, s.created_at, u.username FROM submissions s JOIN users u ON s.author_id = u.id ''') submissions = c.fetchall() c.execute(''' SELECT p.id, p.title, p.created_at, u.username FROM posts p JOIN users u ON p.author_id = u.id ORDER BY p.created_at DESC LIMIT 5 ''') recent_posts = c.fetchall() return render_template('moderate.html', submissions=submissions, recent_posts=recent_posts) @app.route('/approve/<int:sid>') def approve(sid): if not is_admin(): return "权限不足", 403 with sqlite3.connect("data.db") as conn: c = conn.cursor() c.execute("SELECT * FROM submissions WHERE id=?", (sid,)) sub = c.fetchone() if sub: c.execute("INSERT INTO posts (title, content, author_id, created_at) VALUES (?, ?, ?, ?)", (sub[1], sub[2], sub[3], sub[4])) c.execute("DELETE FROM submissions WHERE id=?", (sid,)) conn.commit() return redirect(url_for('moderate')) @app.route('/reject/<int:sid>') def reject(sid): if not is_admin(): return "权限不足", 403 with sqlite3.connect("data.db") as conn: c = conn.cursor() c.execute("DELETE FROM submissions WHERE id=?", (sid,)) conn.commit() return redirect(url_for('moderate')) @app.route('/ban/<int:user_id>') def ban(user_id): if not is_admin(): return "权限不足", 403 with sqlite3.connect("data.db") as conn: c = conn.cursor() c.execute("UPDATE users SET is_banned=1 WHERE id=?", (user_id,)) c.execute("DELETE FROM submissions WHERE author_id=?", (user_id,)) conn.commit() return redirect(url_for('moderate')) @app.route('/post/<int:pid>') def view_post(pid): with sqlite3.connect("data.db") as conn: c = conn.cursor() c.execute(''' SELECT p.title, p.content, p.created_at, u.username FROM posts p JOIN users u ON p.author_id = u.id WHERE p.id=? ''', (pid,)) post = c.fetchone() if not post: return "文章不存在", 404 return render_template('post.html', post=post) @app.before_request def before_request(): init_db() if __name__ == '__main__': app.run(host='0.0.0.0', port=8080) ``` --- ## 📂 第四步:HTML 模板(全部放在 `templates/` 文件夹中) ### `templates/index.html` ```html <!DOCTYPE html> <html> <head> <title>文火 · WENHUO</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body class="bg-light"> <div class="container py-4"> <h1 class="text-center mb-4">🔥 文火 · WENHUO</h1> {% if user %} <p>你好,{{ user[1] }}!<a href="/logout">登出</a></p> {% if user[1] == 'admin' %} <a href="/moderate" class="btn btn-warning btn-sm mb-3">审核中心</a> {% endif %} {% else %} <p class="text-end"><a href="/login">登录</a> | <a href="/register">注册</a></p> {% endif %} <a href="/submit" class="btn btn-primary mb-4">写一篇文章</a> <h3>最新文章</h3> <ul class="list-group"> {% for post in posts %} <li class="list-group-item"> <h5><a href="/post/{{ post[0] }}">{{ post[1] }}</a></h5> <small>作者:{{ post[3] }} · {{ post[2][:16].replace('T', ' ') }}</small> </li> {% endfor %} </ul> </div> </body> </html> ``` ### `templates/register.html` ```html <h2>注册账号</h2> <form method="POST"> <input type="text" name="username" placeholder="用户名" required class="form-control mb-2"> <input type="password" name="password" placeholder="密码" required class="form-control mb-2"> <button type="submit" class="btn btn-success">注册</button> </form> <p><a href="/login">已有账号?去登录</a></p> ``` ### `templates/login.html` ```html <h2>登录</h2> <form method="POST"> <input type="text" name="username" placeholder="用户名" required class="form-control mb-2"> <input type="password" name="password" placeholder="密码" required class="form-control mb-2"> <button type="submit" class="btn btn-primary">登录</button> </form> <p><a href="/register">没有账号?去注册</a></p> ``` ### `templates/submit.html` ```html <h2>写一篇文章</h2> <form method="POST"> <input type="text" name="title" placeholder="标题(可选)" class="form-control mb-2"> <textarea name="content" rows="10" placeholder="写下你的想法..." class="form-control mb-2" required></textarea> <button type="submit" class="btn btn-primary">提交审核</button> </form> <a href="/">返回首页</a> ``` ### `templates/moderate.html` ```html <h2>🛡️ 审核中心</h2> <h4>待审核文章({{ submissions|length }})</h4> <ul class="list-group mb-4"> {% for s in submissions %} <li class="list-group-item"> <strong>{{ s[1] or '无标题' }}</strong> by {{ s[4] }} <br><small>{{ s[3][:16].replace('T', ' ') }}</small> <br><pre style="background:#f8f9fa;padding:10px;margin:10px 0;">{{ s[2][:100] }}...</pre> <a href="/approve/{{ s[0] }}" class="btn btn-success btn-sm">发布</a> <a href="/reject/{{ s[0] }}" class="btn btn-secondary btn-sm">拒绝</a> <a href="/ban/{{ s[3] }}" class="btn btn-danger btn-sm">封号+拒绝</a> </li> {% endfor %} </ul> <h4>最近发布的文章</h4> <ol> {% for p in recent_posts %} <li>{{ p[1] }} —— {{ p[3] }}</li> {% endfor %} </ol> <a href="/" class="btn btn-outline-secondary">返回首页</a> ``` ### `templates/post.html` ```html <div class="container py-4"> <h1>{{ post[0] }}</h1> <p><small>作者:{{ post[3] }} · {{ post[2][:16].replace('T', ' ') }}</small></p> <hr> <div style="white-space: pre-wrap; line-height: 1.8;">{{ post[1] }}</div> <hr> <a href="/">← 返回首页</a> </div> ``` --- ## ▶️ 第五步:如何在 Replit 上运行? 1. 打开 [https://replit.com](https://replit.com) 2. 登录后点击 **“Create a repl”** 3. 选择模板:`Python` 4. 项目名输入:`wenhuo-blog` 5. 创建完成后: - 先上传或粘贴 `requirements.txt` - 再创建 `main.py` - 创建 `templates/` 文件夹,并把所有 `.html` 文件放进去 6. 点击绿色 **Run** 按钮 7. 等待几秒,右侧就会出现你的网站! --- ## 🛠️ 第六步:首次使用说明 1. 访问你的 Replit 网址(如:`https://wenhuo-blog.yourname.repl.co`) 2. 点击 “注册”,用用户名 `admin` 注册一个账号(密码自定) 3. 登录 `admin` 4. 你现在就是管理员了!访问 `/moderate` 就能看到审核中心 5. 别人投稿后,你就可以在这里审批或封号 --- 🎉 恭喜!你现在已经拥有一个 **真正可用的多人博客平台**,任何人都能投稿,只有你能决定谁能发表。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值