个人局域网网盘
from flask import Flask, request, send_from_directory, render_template_string, redirect, url_for, session
import os
app = Flask(__name__)
app.secret_key = "supersecretkey" # 用于会话管理
UPLOAD_FOLDER = "shared_files"
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
# 模拟用户数据库
USERS = {
"admin": {"password": "adminpass", "role": "admin"},
"user": {"password": "userpass", "role": "user"}
}
# HTML 页面模板
HTML_TEMPLATE = """
<!doctype html>
<html>
<head><title>局域网文件分享</title></head>
<body>
<h1>局域网文件分享</h1>
{% if 'username' in session %}
<p>欢迎, {{ session['username'] }} (<a href="/logout">登出</a>)</p>
{% else %}
<p><a href="/login">登录</a> | <a href="/register">注册</a></p>
{% endif %}
{% if session.get('role') == 'admin' %}
<h2>上传文件</h2>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
{% endif %}
<h2>文件列表</h2>
<ul>
{% for file in files %}
<li><a href="/download/{{ file }}">{{ file }}</a></li>
{% endfor %}
</ul>
</body>
</html>
"""
@app.route('/')
def index():
files = os.listdir(UPLOAD_FOLDER)
return render_template_string(HTML_TEMPLATE, files=files)
@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'] == password:
session['username'] = username
session['role'] = USERS[username]['role']
return redirect(url_for('index'))
return "登录失败,用户名或密码错误!"
return """
<form action="/login" method="post">
用户名: <input type="text" name="username"><br>
密码: <input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
"""
@app.route('/logout')
def logout():
session.pop('username', None)
session.pop('role', None)
return redirect(url_for('index'))
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if username not in USERS:
USERS[username] = {"password": password, "role": "user"}
return redirect(url_for('login'))
return "用户名已存在!"
return """
<form action="/register" method="post">
用户名: <input type="text" name="username"><br>
密码: <input type="password" name="password"><br>
<input type="submit" value="注册">
</form>
"""
@app.route('/upload', methods=['POST'])
def upload_file():
if session.get('role') != 'admin':
return "无权限上传文件!"
if 'file' not in request.files:
return "没有文件!"
file = request.files['file']
if file.filename == '':
return "文件名为空!"
file.save(os.path.join(UPLOAD_FOLDER, file.filename))
return "上传成功! <a href='/'>返回</a>"
@app.route('/download/<filename>')
def download_file(filename):
if 'username' not in session:
return redirect(url_for('login')) # 未登录,重定向到登录页
return send_from_directory(UPLOAD_FOLDER, filename)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
posted on 2025-02-03 09:30 shenhshihao 阅读(11) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」