98 lines
3.1 KiB
Python
98 lines
3.1 KiB
Python
from flask import Flask, render_template, request, redirect, url_for, flash, session
|
|
from extensions import db # 从 extensions 导入 db
|
|
from movies import movies_bp # 导入蓝图
|
|
from models import User
|
|
|
|
app = Flask(__name__)
|
|
app.secret_key = 'f0d89ad2bad39872d3a48871ba4f95f4aea178fb8d1e43'
|
|
|
|
# 配置 MySQL
|
|
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@localhost:3316/filmsystem'
|
|
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
|
|
|
# 初始化数据库
|
|
db.init_app(app)
|
|
|
|
# 注册猜你喜欢模块
|
|
from recommendations import recommendations_bp
|
|
app.register_blueprint(recommendations_bp)
|
|
|
|
# 注册detail.html蓝图
|
|
app.register_blueprint(movies_bp)
|
|
|
|
# 注册dashboard.html蓝图
|
|
from dashboard import dashboard_bp
|
|
app.register_blueprint(dashboard_bp)
|
|
|
|
@app.route('/')
|
|
def index():
|
|
return redirect(url_for('auth'))
|
|
# 注册/登录页面
|
|
@app.route('/auth', methods=['GET', 'POST'])
|
|
def auth():
|
|
if 'user_id' in session: # 已登录用户重定向
|
|
return redirect(url_for('dashboard'))
|
|
|
|
if request.method == 'POST':
|
|
# 检查当前表单模式
|
|
mode = request.form.get('mode')
|
|
|
|
if mode == 'register': # 注册流程
|
|
email = request.form.get('email')
|
|
password = request.form.get('password') # 明文存储密码
|
|
nickname = request.form.get('nickname')
|
|
user_type = request.form.get('user_type')
|
|
|
|
# 是否已经注册
|
|
if User.query.filter_by(email=email).first():
|
|
flash('Email is already registered.')
|
|
return redirect(url_for('auth'))
|
|
|
|
# 创建用户并保存
|
|
new_user = User(
|
|
email=email,
|
|
password=password,
|
|
nickname=nickname,
|
|
user_type=user_type
|
|
)
|
|
db.session.add(new_user)
|
|
db.session.commit()
|
|
flash('Registration successful! Please log in.')
|
|
return redirect(url_for('auth'))
|
|
|
|
elif mode == 'login': # 登录流程
|
|
email = request.form.get('email')
|
|
password = request.form.get('password')
|
|
|
|
# 查询用户
|
|
user = User.query.filter_by(email=email).first()
|
|
if user and user.password == password: # 直接比较明文密码
|
|
session['user_id'] = user.id # 保存用户会话
|
|
session['nickname'] = user.nickname # 保存昵称在session中
|
|
session['user_type'] = user.user_type # 保存用户身份
|
|
return redirect(url_for('dashboard'))
|
|
else:
|
|
flash('Invalid email or password.')
|
|
return redirect(url_for('auth'))
|
|
|
|
return render_template('auth.html') # 渲染注册/登录页面
|
|
|
|
# 用户仪表盘,只有登录后才能访问
|
|
@app.route('/dashboard')
|
|
def dashboard():
|
|
if 'user_id' not in session:
|
|
return redirect(url_for('auth'))
|
|
return "Welcome to the dashboard!"
|
|
|
|
|
|
# 退出登录
|
|
@app.route('/logout')
|
|
def logout():
|
|
session.pop('user_id', None)
|
|
flash('You have been logged out.')
|
|
return redirect(url_for('auth'))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app.run(debug=True)
|