from flask import Flask, render_template, url_for, flash, redirect, request
from flask_migrate import Migrate
from front.static.config import Config
from models import db, User, Photo
from forms import RegistrationForm, LoginForm, UploadForm
from flask_login import LoginManager, login_user, current_user, logout_user, login_required
from flask_uploads import configure_uploads, IMAGES, UploadSet
from flask_wtf import FlaskForm
from wtforms import FileField, IntegerField, SubmitField
from wtforms.validators import DataRequired
from werkzeug.utils import secure_filename
import os
from processing import process_photo
app = Flask(__name__)
app.config.from_object(Config)
app.config['SECRET_KEY'] = 'mysecretkey'
app.config['UPLOAD_FOLDER'] = 'static/uploads'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
migrate = Migrate(app, db)
login_manager = LoginManager(app)
login_manager.login_view = 'login'
photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)
class UploadForm(FlaskForm):
photo = FileField('Upload Photo', validators=[DataRequired()])
submit = SubmitField('Upload')
class RatePhotoForm(FlaskForm):
rating = IntegerField('Rating (1-5)', validators=[DataRequired()])
submit = SubmitField('Submit Rating')
def home():
return redirect(url_for('view_photos'))
# 首页界面
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
# 注册界面
@app.route("/register", methods=['GET', 'POST'])
def register():
db.create_all()
if current_user.is_authenticated:
return redirect(url_for('index'))
form = RegistrationForm()
if form.validate_on_submit():
print(form.username.data)
user = User(username=form.username.data, password=form.password.data)
db.session.add(user)
db.session.commit()
flash('Your account has been created!', 'success')
return redirect(url_for('login'))
return render_template('register.html', title='Register', form=form)
# 登入界面
@app.route("/login", methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('index'))
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user and user.password == form.password.data:
login_user(user, remember=True)
return redirect(url_for('index'))
else:
flash('Login Unsuccessful. Please check username and password', 'danger')
return render_template('login.html', title='Login', form=form)
# 交互界面
@app.route("/logout")
def logout():
logout_user()
return redirect(url_for('index'))
@app.route("/", methods=['GET', 'POST'])
@login_required
def index():
form = UploadForm()
if form.validate_on_submit():
filename = photos.save(form.photo.data)
photo = Photo(image_file=filename, owner=current_user)
db.session.add(photo)
db.session.commit()
flash('Photo uploaded successfully!', 'success')
user_photos = Photo.query.filter_by(user_id=current_user.id).all()
return render_template('index.html', title='Home', form=form, photos=user_photos)
@app.route('/upload', methods=['GET', 'POST'])
def upload():
form = UploadForm()
if form.validate_on_submit():
file = form.photo.data
filename = file.filename
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(file_path)
# 处理照片
processed_filename = f"processed_{filename}"
processed_file_path = os.path.join(app.config['PROCESSED_FOLDER'], processed_filename)
process_photo(file_path, processed_file_path)
# 保存处理后的照片信息到数据库
new_photo = Photo(original_filename=filename, processed_filename=processed_filename)
db.session.add(new_photo)
db.session.commit()
flash('Photo uploaded and processed successfully!', 'success')
return redirect(url_for('view_photos'))
return render_template('upload.html', form=form)
@app.route('/view_photos')
def view_photos():
photos = Photo.query.all()
return render_template('view_photos.html', photos=photos)
@app.route('/rate_photo/<int:photo_id>', methods=['GET', 'POST'])
def rate_photo(photo_id):
photo = Photo.query.get_or_404(photo_id)
form = RatePhotoForm()
if form.validate_on_submit():
photo.rating = form.rating.data
db.session.commit()
flash('Thank you for your rating!', 'success')
return redirect(url_for('view_photos'))
return render_template('rate_photo.html', form=form, photo=photo)
if __name__ == '__main__':
app.run(debug=True)
该网页在view_photo阶段,网页上照片只能显示一个照片格式的图标,该怎么解决啊