skymoon-13

导航

团队项目冲刺--Day2

团队项目冲刺--Day2

一、今日站立式会议照片

image

二、项目燃尽图

image

三、昨日已完成的工作

成员 昨日完成内容 Work Item
宋可月 完成后端项目骨架、启动配置、基础蓝图结构 T-1
齐畅 完成登录 / 注册页面初版 UI T-4
颜宏宇 场馆模块 API 的接口结构草稿 T-6
戴清 完成 users 表结构设计与 ER 图初版 T-2
缪子睿 测试文档架构搭建,用例模板建立 T-23
曹伟斌 完成 Flask-Mail 初始配置 + 发送测试邮件 T-18
赖彦彤 场馆列表 UI 草稿设计 T-7

四、今日计划完成的工作

成员 今日任务 Work Item
宋可月 实现注册/登录接口、加密、JWT T-3
齐畅 前端表单校验、联调注册 API T-4
颜宏宇 实现场馆 API(测试数据) T-6
戴清 设计 venues、reservations 表结构 T-5, T-9
缪子睿 登录/注册用例设计、Postman 集合初始化 T-20
曹伟斌 封装 send_mail() 函数 T-18
赖彦彤 开发场馆详情页框架 T-8

五、今日遇到的困难

  1. JWT 登录过期配置冲突(宋可月)
    SECRET_KEY 与 JWT_SECRET_KEY 没区分导致验证失败
    解决:拆分配置 + 单独创建 jwt.py 管理

  2. 前端联调出现 CORS 错误(齐畅)
    Flask 未添加 CORS
    解决:pip install flask-cors → 后端添加 CORS(app)

  3. 场馆收费字段较多(戴清)
    学生收费、教师免费、时段收费不同
    计划先固定逻辑,Beta 再扩展

  4. 邮件模块中文乱码(曹伟斌)
    邮件头字符集缺失
    解决:加入 UTF-8 MIMEText 设置

六、最新模块代码

  1. app.py
from flask import Flask
from flask_cors import CORS
from extensions import db, migrate, jwt, mail
from config import Config

def create_app():
    app = Flask(__name__)
    app.config.from_object(Config)

    # init extensions
    db.init_app(app)
    migrate.init_app(app, db)
    jwt.init_app(app)
    mail.init_app(app)

    CORS(app)

    # register blueprints
    from routes.auth import auth_bp
    from routes.venue import venue_bp

    app.register_blueprint(auth_bp, url_prefix="/api/auth")
    app.register_blueprint(venue_bp, url_prefix="/api/venues")

    @app.route("/")
    def home():
        return {"msg": "Sports Venue Reservation System Backend Running"}

    return app
if __name__ == "__main__":
    app = create_app()
    app.run(debug=True)
  1. models.py
from extensions import db
from werkzeug.security import generate_password_hash, check_password_hash

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    email = db.Column(db.String(120), unique=True, nullable=False)
    password_hash = db.Column(db.String(200))
    role = db.Column(db.String(20), default="student")  # student / teacher / admin

    def set_password(self, raw):
        self.password_hash = generate_password_hash(raw)

    def check_password(self, raw):
        return check_password_hash(self.password_hash, raw)

  1. routes/auth.py(注册 & 登录 API)
from flask import Blueprint, request
from extensions import db
from models import User
from flask_jwt_extended import create_access_token

auth_bp = Blueprint("auth", __name__)

@auth_bp.post("/register")
def register():
    data = request.json
    email = data.get("email")
    pwd = data.get("password")
    role = data.get("role", "student")

    if User.query.filter_by(email=email).first():
        return {"msg": "Email already exists"}, 400

    user = User(email=email, name=data.get("name"), role=role)
    user.set_password(pwd)

    db.session.add(user)
    db.session.commit()

    return {"msg": "Register success"}, 200


@auth_bp.post("/login")
def login():
    data = request.json
    email = data.get("email")
    pwd = data.get("password")

    user = User.query.filter_by(email=email).first()
    if not user or not user.check_password(pwd):
        return {"msg": "Invalid credentials"}, 401

    token = create_access_token(identity={"id": user.id, "role": user.role})
    return {"token": token, "role": user.role}, 200
  1. routes/venue.py(场馆 API – Day2 版本仅返回测试数据)
from flask import Blueprint

venue_bp = Blueprint("venue", __name__)

@venue_bp.get("/")
def list_venues():
    return {
        "venues": [
            {"id": 1, "name": "羽毛球馆", "price_student": 10, "free_for_teacher": True},
            {"id": 2, "name": "篮球馆", "price_student": 12, "free_for_teacher": True},
        ]
    }

@venue_bp.get("/<int:vid>")
def venue_detail(vid):
    return {
        "id": vid,
        "name": "羽毛球馆" if vid == 1 else "篮球馆",
        "location": "体育中心一楼",
        "open_time": "08:00 - 22:00",
        "price_student": 10,
        "free_for_teacher": True,
        "description": "场馆示例信息,用于前端联调"
    }

七、每日总结

宋可月: 用户模块已跑通,明天进入鉴权 & 会话保护。
齐畅: 前端表单已经顺畅,准备和后端联调。
颜宏宇: 场馆 API 已成型,明天接数据库。
戴清: 表结构定了,预约表字段较多但清晰了。
缪子睿: 登录测试用例已准备完毕,等待联调。
曹伟斌: 邮件模块异常处理还需完善。
赖彦彤: 场馆详情页面基本结构可用了。

posted on 2025-12-03 09:28  桜井朋子  阅读(0)  评论(0)    收藏  举报