Alice
嗨,Bob!最近我在做一个校友录管理系统,想加入一个相册功能,你觉得怎么样?
Bob
听起来很酷啊!相册可以用来保存校园活动的照片,这会让系统更有吸引力。你打算怎么实现呢?
Alice
首先,我计划创建一个`Album`表,用于存储相册信息,比如相册名称、描述等。然后每个相册下面会有多个照片,所以我还需要一个`Photo`表来存储图片路径和其他信息。
Bob
不错的想法!那数据库该怎么设计呢?
Alice
我设计了两个表:`Album`和`Photo`。`Album`表有`id`, `name`, `description`字段;而`Photo`表则包含`id`, `album_id`, `path`, `caption`字段。`album_id`是外键,指向`Album`表的`id`字段。
Bob
很棒的设计!接下来是如何实现上传图片的功能?

Alice
前端使用HTML和JavaScript,后端可以用Python的Flask框架。首先,用户选择要上传的照片并填写相册名称,然后通过AJAX请求将数据发送到服务器。
Bob
好的,那服务器端的代码怎么写?
Alice
服务器端接收POST请求,处理文件上传,并将数据保存到数据库中。以下是一个简单的Flask代码片段:
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///alumni.db'
db = SQLAlchemy(app)
class Album(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
description = db.Column(db.Text)
class Photo(db.Model):
id = db.Column(db.Integer, primary_key=True)
album_id = db.Column(db.Integer, db.ForeignKey('album.id'), nullable=False)
path = db.Column(db.String(200), nullable=False)
caption = db.Column(db.String(200))
@app.route('/upload', methods=['POST'])
def upload():
album_name = request.form['album_name']
photo_file = request.files['photo']
# Save photo to disk and get the path
photo_path = save_photo(photo_file)
new_album = Album(name=album_name)
db.session.add(new_album)
db.session.commit()
new_photo = Photo(album_id=new_album.id, path=photo_path, caption=request.form['caption'])
db.session.add(new_photo)
db.session.commit()
return jsonify({'message': 'Upload successful!'})
def save_photo(file):
# Implement your file-saving logic here
pass
Bob
看起来很完整!最后一步就是展示这些照片了。
Alice
对!我们可以根据`album_id`查询对应的`Photo`记录,并在网页上显示它们。这样,用户就可以浏览他们的校园回忆了。