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.
233 lines
8.5 KiB
233 lines
8.5 KiB
from flask import Flask, render_template, request,redirect,url_for,jsonify
|
|
from flask_sqlalchemy import SQLAlchemy
|
|
from werkzeug.security import generate_password_hash,check_password_hash
|
|
from flask_cors import CORS
|
|
import re
|
|
import requests
|
|
from bs4 import BeautifulSoup
|
|
app = Flask(__name__,static_folder="C:/Users/陈公子/PycharmProjects/flaskProject3/static")
|
|
CORS(app)
|
|
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:1827197512@localhost/mydatabase'
|
|
db = SQLAlchemy(app)
|
|
|
|
#定义用户表
|
|
class User(db.Model):
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
username = db.Column(db.String(50), unique=True, nullable=False)
|
|
email = db.Column(db.String(120), unique=True, nullable=False)
|
|
password = db.Column(db.String(128), nullable=False)
|
|
def __repr__(self):
|
|
return f'<User {self.username}>'
|
|
#定义管理员表
|
|
class Admin(db.Model):
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
username = db.Column(db.String(50), unique=True, nullable=False)
|
|
password = db.Column(db.String(128), nullable=False)
|
|
def __repr__(self):
|
|
return f'<User {self.username}>'
|
|
class Game(db.Model):
|
|
gameId = db.Column(db.Integer, primary_key=True)
|
|
gameName = db.Column(db.String(100), nullable=False)
|
|
coverImage = db.Column(db.String(100))
|
|
#编辑用户信息
|
|
@app.route('/User_edit/<int:id>', methods=["GET", "POST"])
|
|
def User_edit(id):
|
|
user = User.query.get_or_404(id)
|
|
if request.method == "POST":
|
|
user.username = request.form["username"]
|
|
password = request.form["password"]
|
|
password_hash = generate_password_hash(password)
|
|
user.password =password_hash;
|
|
db.session.commit()
|
|
return redirect("/user_admin")
|
|
return render_template("edit.html", user=user)
|
|
#主页面
|
|
@app.route('/')
|
|
def index():
|
|
url = "https://www.3dmgame.com/jqremphb.html"
|
|
url1 = "https://www.3dmgame.com/phb.html"
|
|
response = requests.get(url)
|
|
response1 = requests.get(url1)
|
|
html = response.text
|
|
html1 = response1.text
|
|
soup = BeautifulSoup(html, 'html.parser')
|
|
soup1 = BeautifulSoup(html1, 'html.parser')
|
|
a_tag = soup.find_all('div', class_='phlist')
|
|
a_tag1 = soup1.find_all('div', class_='phlist')
|
|
select_tag = a_tag[:6]
|
|
select_tag1 = a_tag1[:6]
|
|
srcs = []
|
|
src1s = []
|
|
for i in select_tag:
|
|
message = {}
|
|
message['img'] = i.find('a', class_='img').find('img')['data-original']
|
|
message['word'] = i.find('div', class_='bt').find('a').get_text()
|
|
message['url'] = i.find('div',class_='bt').find('a')['href']
|
|
srcs.append(message)
|
|
for i in select_tag1:
|
|
message = {}
|
|
message['img'] = i.find('a', class_='img').find('img')['data-original']
|
|
message['word'] = i.find('div', class_='bt').find('a').get_text()
|
|
message['url'] = i.find('div', class_='bt').find('a')['href']
|
|
src1s.append(message)
|
|
return render_template('none-login.html',srcs=srcs,src1s=src1s)
|
|
#用户搜索功能
|
|
@app.route('/search', methods=['GET'])
|
|
def search_games():
|
|
query = request.args.get('query') # 获取查询参数
|
|
games = Game.query.all()
|
|
# 在游戏列表中使用正则表达式进行模糊匹配
|
|
results = []
|
|
pattern = re.compile('.*{}.*'.format(re.escape(query)), re.IGNORECASE)
|
|
for game in games:
|
|
if re.match(pattern, game['name']):
|
|
results.append(game)
|
|
|
|
return jsonify(results)
|
|
#注册页面
|
|
@app.route('/register')
|
|
def register_html():
|
|
return render_template('register.html')
|
|
#登录页面
|
|
@app.route('/login')
|
|
def login_html():
|
|
return render_template('login.html')
|
|
#管理员登录页面
|
|
@app.route('/admin_login')
|
|
def admin_login():
|
|
return render_template('admin.html')
|
|
#注册处理
|
|
@app.route('/register_dispose', methods=['POST'])
|
|
def register():
|
|
username = request.form['username']
|
|
email = request.form['email']
|
|
password = request.form['password']
|
|
confirm_password = request.form['confirm_password']
|
|
if password != confirm_password:
|
|
return 'Password does not match!'
|
|
user = User.query.filter_by(username=username).first()
|
|
if user is not None:
|
|
return 'Username already exists!'
|
|
user = User.query.filter_by(email=email).first()
|
|
if user is not None:
|
|
return 'Email already exists!'
|
|
password_hash = generate_password_hash(password)
|
|
user = User(username=username, email=email, password=password_hash)
|
|
db.session.add(user)
|
|
db.session.commit()
|
|
return 'Registration successful!'
|
|
#登录处理
|
|
@app.route('/login_dispose', methods=['POST'])
|
|
def login():
|
|
username = request.form['username']
|
|
password = request.form['password']
|
|
url = "https://www.3dmgame.com/jqremphb.html"
|
|
url1 = "https://www.3dmgame.com/phb.html"
|
|
response = requests.get(url)
|
|
response1 = requests.get(url1)
|
|
html = response.text
|
|
html1 = response1.text
|
|
soup = BeautifulSoup(html, 'html.parser')
|
|
soup1 = BeautifulSoup(html1, 'html.parser')
|
|
a_tag = soup.find_all('div', class_='phlist')
|
|
a_tag1 = soup1.find_all('div', class_='phlist')
|
|
select_tag = a_tag[:6]
|
|
select_tag1 = a_tag1[:6]
|
|
srcs = []
|
|
src1s = []
|
|
for i in select_tag:
|
|
message = {}
|
|
message['img'] = i.find('a', class_='img').find('img')['data-original']
|
|
message['word'] = i.find('div', class_='bt').find('a').get_text()
|
|
message['url'] = i.find('div',class_='bt').find('a')['href']
|
|
srcs.append(message)
|
|
for i in select_tag1:
|
|
message = {}
|
|
message['img'] = i.find('a', class_='img').find('img')['data-original']
|
|
message['word'] = i.find('div', class_='bt').find('a').get_text()
|
|
message['url'] = i.find('div', class_='bt').find('a')['href']
|
|
src1s.append(message)
|
|
user = User.query.filter_by(username=username).first()
|
|
if user is None or not check_password_hash(user.password, password):
|
|
return 'Invalid username or password'
|
|
# valid login
|
|
else :
|
|
return render_template('game.html',user=user,srcs=srcs,src1s=src1s)
|
|
#管理员登录处理
|
|
@app.route('/admin', methods=['POST'])
|
|
def admin():
|
|
username = request.form['username']
|
|
password = request.form['password']
|
|
admin = Admin.query.filter_by(username=username).first()
|
|
if admin is None or not admin.password==password:
|
|
return 'Invalid username or password'
|
|
# valid login
|
|
else :
|
|
users = User.query.all()
|
|
return render_template('user_admin.html', users=users)
|
|
#用户密码管理页面
|
|
@app.route('/user_admin')
|
|
def user_admin():
|
|
users = User.query.all()
|
|
return render_template('user_admin.html', users =users)
|
|
#删除用户信息
|
|
@app.route("/User_delete/<int:id>")
|
|
def User_delete(id):
|
|
user = User.query.get_or_404(id)
|
|
db.session.delete(user)
|
|
db.session.commit()
|
|
return redirect('/user_admin')
|
|
#编辑用户信息
|
|
@app.route("/edit",methods=['POST'])
|
|
def edit():
|
|
email = request.form.get('email') # 使用 request.form 获取表单数据
|
|
user = User.query.filter_by(email=email).first()
|
|
return render_template('edit.html',user=user)
|
|
|
|
@app.route("/data_edit",methods=['POST'])
|
|
def data_edit():
|
|
data = request.get_json()
|
|
newusername = data['newusername']
|
|
username=data['username']
|
|
user = User.query.filter_by(username=username).first()
|
|
if user is None:
|
|
return '发生了异常错误'
|
|
else:
|
|
user.username = newusername
|
|
db.session.commit()
|
|
return user.email
|
|
@app.route('/username_edit',methods=['GET'])
|
|
def username_edit():
|
|
username = request.args.get('username')
|
|
user = User.query.filter_by(username=username).first()
|
|
if user is None:
|
|
return '用户名不存在'
|
|
else:
|
|
return render_template('username-edit.html',username=username)
|
|
@app.route('/edit2',methods=['GET'])
|
|
def edit2():
|
|
username = request.args.get('username')
|
|
user = User.query.filter_by(username=username).first()
|
|
if user is None:
|
|
return '用户名不存在'
|
|
else:
|
|
return render_template('password-edit.html',username=username)
|
|
@app.route("/password_edit",methods=['POST'])
|
|
def password_edit():
|
|
data = request.get_json()
|
|
oldpassoword = data['oldpassword']
|
|
newpassword = data['newpassword']
|
|
username=data['username']
|
|
user = User.query.filter_by(username=username).first()
|
|
if user is None:
|
|
return '发生了异常错误'
|
|
else:
|
|
if check_password_hash(user.password, oldpassoword):
|
|
user.password = generate_password_hash(newpassword)
|
|
db.session.commit()
|
|
return user.email
|
|
else :
|
|
return '旧密码错误'
|
|
if __name__ == '__main__':
|
|
app.run(debug=True)
|