成績登記

一個超簡易的成績登記網站

Sun Jul 21 2024
390 words · 5 minutes
  • 以下是由python web所架的成績繳交網站 當幹部小老師的,都懶得輸入成績,所以我寫了個好東西 如果怕對方輸入假成績,還有上傳圖片的功能 第一次玩python web哈哈

整體佈局

.
├── app.py
├── grades.csv
├── templates
│ ├── index.html
│ └── success.html
└── uploads
└── 4.jpg

app.py
from flask import Flask, request, render_template, redirect, url_for
import os
app = Flask(__name__)
UPLOAD_FOLDER = 'uploads'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/submit', methods=['POST'])
def submit():
seatNumber = request.form['seatNumber']
score = request.form['score']
photo = request.files['photo']
if photo:
filename = f"{seatNumber}.jpg"
photo.save(os.path.join(UPLOAD_FOLDER, filename))
with open('grades.csv', 'a') as file:
file.write(f'{seatNumber}, {score}\n')
return redirect(url_for('success'))
@app.route('/success')
def success():
return render_template('success.html')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=60000)

index.html
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>地科成績</title>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
<style>
.container {
margin-top: 40px;
}
.card {
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
transition: box-shadow 0.3s ease-in-out;
}
.card:hover {
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);
}
.btn-primary {
background-color: #7778d3;
border: none;
color: white;
padding: 10px 24px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
border-radius: 5px;
transition-duration: 0.4s;
cursor: pointer;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-6 offset-md-3">
<div class="card p-4">
<h2 class="text-center mb-4">地科成績</h2>
<form action="/submit" method="POST" enctype="multipart/form-data">
<div class="form-group">
<label for="seatNumber">座號:</label>
<input type="number" class="form-control" id="seatNumber" name="seatNumber" required>
</div>
<div class="form-group">
<label for="score">分數:</label>
<input type="number" class="form-control" id="score" name="score" required>
</div>
<div class="form-group">
<label for="photo">上傳照片:</label>
<input type="file" class="form-control-file" id="photo" name="photo" accept="image/*" required>
</div>
<button type="submit" class="btn btn-primary btn-block">提交</button>
</form>
<div id="result" class="mt-3 text-center"></div>
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.5.4/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>

success.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>提交成功</title>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
<style>
.container {
margin-top: 20%;
}
.alert-success {
font-size: 24px;
text-align: center;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-6 offset-md-3">
<div class="alert alert-success">
成績已成功提交!
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.5.4/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>

Thanks for reading!

成績登記

Sun Jul 21 2024
390 words · 5 minutes