Kenneth 4 weeks ago
parent 5da06516d6
commit 241a6f95c6

@ -0,0 +1,3 @@
# 默认忽略的文件
/shelf/
/workspace.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.12" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12" project-jdk-type="Python SDK" />
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/TheBattleCar.iml" filepath="$PROJECT_DIR$/.idea/TheBattleCar.iml" />
</modules>
</component>
</project>

@ -0,0 +1,131 @@
from flask import Flask, render_template, request, redirect, url_for, session
from flask import Flask, request, jsonify, send_from_directory
import os
app = Flask(__name__)
app.secret_key = 'your_secret_key' # 用于会话管理,请替换为更安全的密钥
app.config['UPLOAD_FOLDER'] = 'uploads' # 设置上传文件存储目录
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) # 确保目录存在
# EXTERNAL_SCOUT_URL = 'http://192.168.78.178:5000/' # 外部侦查者页面URL
# 处理文件上传
@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return jsonify({'message': 'No file part'}), 400
file = request.files['file']
if file.filename == '':
return jsonify({'message': 'No selected file'}), 400
if file:
filepath = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)
file.save(filepath)
return jsonify({'message': 'File uploaded successfully', 'filepath': filepath}), 201
# 提供上传文件的访问
@app.route('/uploads/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
# 登录页面
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# 在这里添加你的认证逻辑(例如,从数据库验证用户名和密码)
# 假设我们总是接受任何用户名和密码为'admin'的登录
if username == 'admin' and password == 'admin':
role = request.form['role']
session['username'] = username
session['role'] = role
if role == '侦查者':
return redirect(url_for('scout'))
elif role == '指挥者':
return redirect(url_for('commander'))
elif role == '攻击者':
return redirect(url_for('attacker'))
else:
return "Invalid credentials. Please try again."
return render_template('login.html')
# 侦查者页面
@app.route('/scout')
def scout():
if 'username' not in session or session['role'] != '侦查者':
return redirect(url_for('login'))
return render_template('scout.html')
# 指挥者页面
@app.route('/commander')
def commander():
if 'username' not in session or session['role'] != '指挥者':
return redirect(url_for('login'))
return render_template('commander.html')
# 攻击者页面
@app.route('/attacker')
def attacker():
if 'username' not in session or session['role'] != '攻击者':
return redirect(url_for('login'))
return render_template('attacker.html')
# 退出登录(清除会话)
@app.route('/logout')
def logout():
session.pop('username', None)
session.pop('role', None)
return redirect(url_for('login'))
from werkzeug.utils import secure_filename
import uuid
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/send_message', methods=['GET', 'POST'])
def send_message():
if request.method == 'POST':
# 处理照片上传
if 'photo' in request.files:
file = request.files['photo']
if file.filename == '':
return "No selected file", 400
if file and allowed_file(file.filename):
filename = secure_filename(f"{uuid.uuid4().hex}_{file.filename}")
filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(filepath)
photo_url = url_for('uploaded_file', filename=filename, _external=True)
else:
return "Allowed file types are png, jpg, jpeg, gif", 400
else:
photo_url = None
# 处理消息文本上传
message = request.form.get('message')
if not message:
return "No message provided", 400
# 在这里处理消息和照片的存储或进一步处理
# 例如将消息和照片URL存储到数据库
# 返回成功响应或重定向
return f"Message and photo (if uploaded) have been received. Message: {message}\nPhoto URL: {photo_url if photo_url else 'N/A'}"
# 如果是GET请求渲染发送消息的表单
return render_template('send_message.html')
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=8000)

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<title>攻击者界面</title>
</head>
<body>
<h1>攻击者界面</h1>
<h2>功能待实现</h2>
</body>
</html>

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html>
<head>
<title>指挥者界面</title>
</head>
<body>
<h1>指挥者查看照片</h1>
<ul>
{% for media in media_items %}
<li><img src="{{ url_for('static', filename=media.filename) }}" width="100"></li>
{% endfor %}
</ul>
</body>
</html>

@ -0,0 +1,24 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required><br>
<label for="role">Choose a role:</label>
<select id="role" name="role" required>
<option value="侦查者">侦查者</option>
<option value="指挥者">指挥者</option>
<option value="攻击者">攻击者</option>
</select><br>
<button type="submit">Login</button>
</form>
</body>
</html>

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Scout Page</title>
</head>
<body>
<h1>Scout Page</h1>
<button onclick="window.location.href='http://192.168.78.178:5000/'">控制小车</button>
<button onclick="window.location.href='{{ url_for('send_message') }}'">发送消息</button>
</body>
</html>

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Send Message</title>
</head>
<body>
<h1>Send Message</h1>
<form method="post" enctype="multipart/form-data">
<label for="message">Message:</label>
<textarea id="message" name="message" rows="4" cols="50" required></textarea><br><br>
<label for="photo">Upload Photo:</label>
<input type="file" id="photo" name="photo"><br><br>
<button type="submit">Send Message</button>
</form>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Loading…
Cancel
Save