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)
if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000)
|