You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

338 lines
10 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from flask import Flask, request, render_template, session, redirect, jsonify
from utils import query
from utils.getHomeData import *
from utils.getSearchData import *
from utils.getTime_tData import *
from utils.getRate_tData import *
from utils.getMapData import *
from utils.getType_tData import *
from utils.getActor_tData import *
from utils.getTableData import *
from utils.getComments_cData import *
import re
app = Flask(__name__)
app.secret_key = 'This is secret_key you know ?'
@app.route('/login', methods=['GET', 'POST'])
def login():
error_message = None
if request.method == 'GET':
return render_template('login.html')
elif request.method == 'POST':
session.clear()
request.form = dict(request.form)
def filter_fn(item):
return request.form['email'] in item
users = query.querys('select * from user where email = %s', [request.form['email']], 'select')
filter_list = list(filter(filter_fn, users))
if len(filter_list):
if request.form['password'] == filter_list[0][2]:
session['email'] = request.form['email']
return redirect('/home')
else:
error_message = '密码错误!'
else:
error_message = '不存在该用户!'
return render_template('login.html', error_message=error_message)
@app.route('/loginout')
def loginout():
session.clear()
return redirect('/login')
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'GET':
return render_template('register.html')
elif request.method == 'POST':
request.form = dict(request.form)
if request.form['password'] != request.form['passwordChecked']:
return render_template('register.html', error_message='两次密码不符合!')
def filter_fn(item):
return request.form['email'] in item
users = query.querys('select * from user', [], 'select')
filter_list = list(filter(filter_fn, users))
if len(filter_list):
return render_template('register.html', error_message='该用户已被注册!')
else:
query.querys('insert into user(email,password) values (%s,%s)',
[request.form['email'], request.form['password']])
return redirect('/login')
# @app.route('/login', methods=['GET', 'POST'])
#
# def login():
# if request.method == 'GET':
# return render_template('login.html')
# elif request.method == 'POST':
# request.form = dict(request.form)
#
# def filter_fn(item):
# return request.form['email'] in item
#
# users = query.querys('select * from user where email = %s', [request.form['email']], 'select')
# filter_list = list(filter(filter_fn, users))
#
# if len(filter_list):
# if request.form['password'] == filter_list[0][2]:
# session['email'] = request.form['email']
# return redirect('/home')
# # return render_template('error.html', message='登陆成功!')
# else:
# return render_template('error.html', message='密码错误!')
# else:
# return render_template('error.html', message='不存在该用户!')
#
#
# @app.route('/loginout')
# def loginout():
# session.clear()
# return redirect('/login')
#
#
# @app.route('/register', methods=['GET', 'POST'])
# def register():
# if request.method == 'GET':
# return render_template('register.html')
# elif request.method == 'POST':
# request.form = dict(request.form)
# if request.form['password'] != request.form['passwordChecked']:
# return render_template('error.html', message='两次密码不符合!')
#
# def filter_fn(item):
# return request.form['email'] in item
#
# users = query.querys('select * from user', [], 'select')
# filter_list = list(filter(filter_fn, users))
#
# if len(filter_list):
# return render_template('error.html', message='该用户已被注册!')
# else:
# query.querys('insert into user(email,password) values (%s,%s)',
# [request.form['email'], request.form['password']])
# return redirect('/login')
# tableData = getTableData()
# tableData = getTableDataByTablePage()
@app.route('/home', methods=['GET', 'POST'])
def home():
email = session.get('email')
maxMovieLen, maxRate, maxCasts, maxCountry, maxTypes, maxLang = getHomeData()
typeEcharData = getTypesEcharData()
row, columns = getRateEcharData()
tableData = getTableData()
return render_template(
'index.html',
email=email,
maxMovieLen=maxMovieLen,
maxRate=maxRate,
maxCasts=maxCasts,
maxCountry=maxCountry,
maxTypes=maxTypes,
maxLang=maxLang,
typeEcharData=typeEcharData,
row=row,
columns=columns,
tableData=tableData,
)
# 电影预告片
@app.route('/movie/<movieName>')
def movie(movieName):
movieUrl = getMovieUrlById(movieName)
return render_template('movie.html', movieUrl=movieUrl)
# @app.route('/movie/<int:movieid>')
# def movie(movieid):
# movieUrl = getMovieUrlById(movieid)
# print(movieUrl)
# return render_template('movie.html', movieUrl=movieUrl)
# 搜索
@app.route('/search/<int:movieId>', methods=['GET', 'POST'])
def search(movieId):
email = session.get('email')
if request.method == 'GET':
resultData = getMovieDetailById(movieId)
else:
request.form = dict(request.form)
resultData = getMovieDetailBySearchWord(request.form['searchWord'])
# print(resultData)
return render_template('search.html', email=email, resultData=resultData)
# 时间
@app.route('/time_t')
def time_t():
row, columns = getYearData()
moveTimeDate = getMovieTimeData()
email = session.get('email')
return render_template('time_t.html', email=email, row=row, columns=columns, moveTimeDate=moveTimeDate)
# 评分
@app.route('/rate_t/<type>', methods=['GET', 'POST'])
def rate_t(type):
email = session.get('email')
typeList = getAllTypes()
# print(typeList)
# print(type)
row, columns = getAllRateDataByType(type)
# print(row, columns)
yearMenRow, yearMenColumns = getYearMeanData()
if request.method == 'GET':
startData, searchName = getStart('')
else:
request.form = dict(request.form)
startData, searchName = getStart(request.form['searchIpt'])
print(startData, searchName)
return render_template(
'rate_t.html',
email=email,
typeList=typeList,
type=type,
row=row,
columns=columns,
startData=startData,
searchName=searchName,
yearMenRow=yearMenRow,
yearMenColumns=yearMenColumns
)
# 地图
@app.route('/map_t')
def map_t():
email = session.get('email')
row, columns = getMapData()
# print(row, type(row))
# print(columns, type(columns))
langRow, langColumns = getLangData()
return render_template('map_t.html', email=email, row=row, columns=columns, langRow=langRow,
langColumns=langColumns)
# 类型
@app.route('/type_t')
def type_t():
email = session.get('email')
typesData = getTypeData()
return render_template('type_t.html', email=email, typesData=typesData)
# 导演、演员
@app.route('/actor_t')
def actor_t():
email = session.get('email')
row, columns = getDirectorsDataTop20()
rowCasts, columnsCasts = getCastsDataTop20()
return render_template('actor_t.html', email=email, row=row, columns=columns, rowCasts=rowCasts,
columnsCasts=columnsCasts)
@app.route('/table/<movieName>')
def table(movieName):
email = session.get('email')
tableData = delMovieByMoiveName(movieName)
# return redirect('/table/0')
# tableData = getTableDataByTablePage()
return render_template('table.html', email=email, tableData=tableData)
# 评论词云图
@app.route('/comments_c', methods=['GET', 'POST'])
def comments_c():
email = session.get('email')
resSrc, searchName = '', '' # 初始化为空字符串
if request.method == 'POST':
searchIpt = request.form['searchIpt']
resSrc, searchName = getCommentsImage(searchIpt)
# 如果没有找到匹配项resSrc 应该是空字符串,此时不渲染图片
return render_template('comments_c.html', email=email, resSrc=resSrc, searchName=searchName)
# 标题词云图
@app.route('/title_c', methods=['GET', 'POST'])
def title_c():
email = session.get('email')
return render_template('title_c.html', email=email)
# 简介词云图
@app.route('/summary_c', methods=['GET', 'POST'])
def summary_c():
email = session.get('email')
return render_template('summary_c.html', email=email)
# 演员名词云图
@app.route('/casts_c', methods=['GET', 'POST'])
def casts_c():
email = session.get('email')
return render_template('casts_c.html', email=email)
@app.route('/')
def allRequest():
return redirect('/login')
# 定义了一个 Flask 应用的全局前置请求处理器before request handler
# 它会在每次请求到达 Flask 应用之前运行
@app.before_request
def before_requre():
# 定义一个正则表达式模式,匹配以 '/static' 开头的路径
pat = re.compile(r'^/static')
# 如果请求的路径匹配 '/static' 开头,则不进行后续的检查,直接返回
# 这意味着静态文件的请求不会被后续的认证逻辑所拦截
if re.search(pat, request.path):
return
# 如果请求的路径是 "/login",同样不进行后续的检查,直接返回
# 这允许用户直接访问登录页面,而不需要先登录
if request.path == "/login":
return
# 如果请求的路径是 '/register',同样不进行后续的检查,直接返回
# 假设 '/register' 是注册页面的路径,允许用户直接访问注册页面
if request.path == '/register':
return
# 尝试从 session 中获取用户的电子邮件地址
email = session.get('email')
# 如果 session 中存在电子邮件地址(即用户已登录)
if email:
# 则不进行任何操作,返回 None 表示继续处理该请求
return None
# 如果 session 中不存在电子邮件地址(即用户未登录)
# 则重定向用户到登录页面 '/login'
return redirect('/login')
if __name__ == '__main__':
app.run()