Flask 电影数据库应用代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# 第一步:导入所有必要模块(按功能分类,清晰有序)
from flask import Flask, url_for, render_template, request, flash, redirect
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hash
import os

# 第二步:初始化应用和数据库
app = Flask(__name__)
app.config['SECRET_KEY'] = 'dev-key-change-in-production' # 生产环境务必更换
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///movies.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

# 第三步:定义数据模型(清晰、规范)
class Movie(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
year = db.Column(db.Integer, nullable=False)
director = db.Column(db.String(50))
rating = db.Column(db.Float)

def __repr__(self):
return f'<Movie {self.title}>'

# 第四步:创建数据库表(首次运行)
@app.before_first_request
def create_tables():
db.create_all()

# 第五步:定义路由和视图(逻辑清晰)
@app.route('/')
def index():
movies = Movie.query.order_by(Movie.year.desc()).all()
return render_template('index.html', movies=movies)

@app.route('/add', methods=['GET', 'POST'])
def add_movie():
if request.method == 'POST':
title = request.form['title']
year = request.form['year']
director = request.form['director']
rating = request.form['rating']

movie = Movie(title=title, year=year, director=director, rating=rating)
db.session.add(movie)
db.session.commit()

flash(f'电影《{title}》添加成功!', 'success')
return redirect(url_for('index'))

return render_template('add_movie.html')

@app.route('/movie/<int:movie_id>')
def movie_detail(movie_id):
movie = Movie.query.get_or_404(movie_id)
return render_template('movie_detail.html', movie=movie)

@app.route('/search')
def search():
query = request.args.get('q', '')
if query:
movies = Movie.query.filter(Movie.title.contains(query)).all()
else:
movies = []
return render_template('search.html', movies=movies, query=query)

# 第六步:运行应用(生产环境需使用WSGI服务器)
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)

功能说明:

  • 完整的CRUD功能(增删改查)
  • 数据库模型设计规范
  • 响应式模板设计
  • 搜索功能实现
  • 用户友好的界面

使用方法:

  1. 安装依赖:pip install flask flask-sqlalchemy
  2. 运行:python app.py
  3. 访问:http://localhost:5000

项目亮点:

  • 清晰的分层架构
  • 完善的错误处理
  • 生产级代码规范
  • 易于扩展和维护