Commit 450e8544 authored by zhangyibo's avatar zhangyibo

[0.9][zyb][第一版]

parent dc001436
from flask import Flask, render_template, redirect, url_for,request
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required,current_user
from models import db,User,SQLAlchemy,Games,SeasonPlayers,Seasons
from sqlalchemy import desc,or_,and_
import datetime
# import json
current_season = 1
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://PyDataStudio:1234@localhost:3306/test'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 可选,若不需要ORM模型修改追踪,则设为False以减少警告信息
# app.config['STATIC_URL_PATH'] = '/static'
# app.config['STATIC_FOLDER'] = './static_files/'
db.init_app(app)
login_manager = LoginManager(app)
login_manager.login_view = 'login'
@login_manager.user_loader
def load_user(user_id):
user = User.query.filter(User.id == user_id).first()
return user if user is not None else None
@app.route('/')
# @login_required
def home():
return "hello world!"
@app.route('/api/main',methods=["GET","POST"])
@login_required
def mainpage():
return f'Hello, World!{current_user.username}'
@app.route('/api/login',methods=['POST'])
def login():
# username = request.args.get("usrname")
# password = request.args.get("psword")
data = request.get_json()
username = data.get('usrname')
password = data.get('psword')
print(data)
if username == None or password == None:
return {"status":"READY"}
user = User.query.filter(User.username == username).first()
if user == None:
return {"status":"USER_NOT_EXIST"}
if user.password != password:
return {"status":"AUTHENTICATION_FAILED"}
# user = User(user.id)
login_user(user)
return {"status":"SUCCESS","is_su":user.is_su,"is_member":user.is_member,"real_name":user.real_name}
@app.route('/api/setRealName',methods=['POST'])
def setRealName():
# real_name = request.args.get("name")
real_name = request.get_json().get('name')
if real_name == None:
return {"status":"READY"}
user = User.query.filter_by(id=current_user.get_id()).first()
user.real_name = real_name
try:
db.session.commit()
return {"status":"SUCCESS"}
except:
db.session.rollback()
return {"status":"FAILED"}
@app.route('/api/logout')
@login_required
def logout():
logout_user()
return {"status":"SUCCESS"}
# return redirect(url_for('home'))
@app.route('/api/register',methods = ['POST'])
def register():
# psword = request.args.get("psword")
data = request.get_json()
username = data.get('usrname')
psword = data.get("psword")
if username == None or psword == None:
return {"status":"FAILED","msg":"缺少用户名密码"}
user = User()
user.username = username
user.password = psword
try:
db.session.add(user)
db.session.commit()
return {"status":"SUCCESS"}
except:
db.session.rollback()
return {"status":"FAILED"}
@app.route('/api/currentUser',methods=['GET'])
def get_current_user(): # 获取当前登录用户信息
if current_user == None:
return {"status":"LOGOUT"}
return {"status":"SUCCESS","user_id":current_user.id,"username":current_user.username,"is_su":current_user.is_su,"is_member":current_user.is_member,"real_name":current_user.real_name,"profile_file":current_user.profile_file}
@app.route('/api/setMembers',methods=['POST'])
def su_set_members():
if not current_user.is_su:
return {"status":"PERMISSION_DENIED"}
data = request.get_json()
user_list = []
for item in data:
id = item.get('usr_id')
is_member = item.get('is_member')
if id == None or is_member == None:
return {"status":"FAILED"}
usr = User.query.filter_by(id=id).first()
if usr == None:
return {"status":"FAILED"}
usr.is_member = is_member
user_list.append(usr)
try:
db.session.commit()
return {"status":"SUCCESS"}
except:
db.session.rollback()
return {"status":"FAILED"}
@app.route('/api/games',methods=['GET'])
def get_games(): # 获取最近比赛列表
season_id = request.args.get("season_id")
pages = request.args.get("pages")
player = request.args.get("player")
if season_id == "0":
season_id = current_season
if pages is None:
return {"status":"FAILED"}
else:
pages = int(pages)
# games = Games.query.all()
lim = 10
if season_id is None and player is None:
games = Games.query.order_by(desc(Games.game_date)).slice((pages-1)*lim,(pages)*lim).all()
elif season_id is not None and player is None:
season_id = int(season_id)
games = Games.query.order_by(desc(Games.game_date)).filter(Games.season_id==season_id).slice((pages-1)*lim,(pages)*lim).all()
elif season_id is None and player is not None:
player = int(player)
games = Games.query.order_by(desc(Games.game_date)).filter(or_(Games.player1_id==player,Games.player2_id==player)).slice((pages-1)*lim,(pages)*lim).all()
elif season_id is not None and player is not None:
season_id = int(season_id)
player = int(player)
games = Games.query.order_by(desc(Games.game_date)).filter(and_(Games.season_id==season_id,or_(Games.player1_id==player,Games.player2_id==player))).slice((pages-1)*lim,(pages)*lim).all()
else:
return {"status":"FAILED"}
game_list = []
for game in games:
game_info={}
game_info['id'] = game.id
game_info['game_date'] = game.game_date.strftime('%Y-%m-%d %H:%M')
game_info['player1_id'] = game.player1_id
game_info['player1_real_name'] = game.player1.real_name
game_info['player1_profile_file'] = game.player1.profile_file
game_info['score1'] = game.score1
game_info['player2_id'] = game.player2_id
game_info['player2_real_name'] = game.player2.real_name
game_info['player2_profile_file'] = game.player2.profile_file
game_info['score2'] = game.score2
game_info['season_name'] = game.season.season_name
game_list.append(game_info)
return {"status":"SUCCESS","Games":game_list}
@app.route('/api/gameDetail',methods=['GET'])
def get_game_detail(): # 获取比赛详情
game_id = request.args.get("game_id")
if game_id == None:
return {"status":"READY"}
game_id = int(game_id)
game = Games.query.filter_by(id=game_id).first()
if game is None:
return {"status":"GAME_NOT_FOUND"}
game_info={}
game_info["status"] = "SUCCESS"
game_info['id'] = game.id
# game_info['game_date'] = str(game.game_date)
game_info['game_date'] = game.game_date.strftime('%Y-%m-%d %H:%M')
game_info['player1_id'] = game.player1_id
game_info['player1_real_name'] = game.player1.real_name
game_info['player1_profile_file'] = game.player1.profile_file
game_info['score1'] = game.score1
game_info['player2_id'] = game.player2_id
game_info['player2_real_name'] = game.player2.real_name
game_info['player2_profile_file'] = game.player2.profile_file
game_info['score2'] = game.score2
game_info['season_id'] = game.season_id
game_info['season_name'] = game.season.season_name
game_info['laucher_id'] = game.laucher_id
game_info['laucher_real_name'] = game.laucher.real_name
game_info['laucher_profile_file'] = game.laucher.profile_file
game_info['lauch_date'] = game.lauch_date.strftime('%Y-%m-%d %H:%M')
game_info['confirmer_id'] = game.confirmer_id
game_info['confirmer_real_name'] = game.confirmer.real_name
game_info['confirmer_profile_file'] = game.confirmer.profile_file
game_info['confirm_date'] = game.confirm_date.strftime('%Y-%m-%d %H:%M')
game_info['game_type'] = game.game_type
return game_info
@app.route('/api/players',methods=['GET'])
def get_players(): # 获取队员(赛季积分排序)
season_id = request.args.get("season_id")
pages = request.args.get("pages")
lim = 10
if season_id is None:
season_id = current_season
else:
season_id = int(season_id)
if pages is None:
return {"status":"FAILED"}
else:
pages = int(pages)
players = SeasonPlayers.query.filter_by(season_id=season_id).order_by(desc(SeasonPlayers.score)).slice((pages-1)*lim,(pages)*lim).all()
player_list = []
for player in players:
player_info = {}
player_info['season_id'] = player.season_id
player_info['season_name'] = player.season.season_name
player_info['score'] = player.score
player_info['group'] = player.group
player_info['player_id'] = player.player_id
player_info['player_real_name'] = player.player.real_name
player_info['player_profile_file'] = player.player.profile_file
player_list.append(player_info)
return {"status":"SUCCESS","Players":player_list}
@app.route('/api/lauchGame',methods=['POST'])
def lauch_game(): # 发起比赛
game_info = request.get_json()
new_game = Games()
new_game.game_type=1
new_game.game_date=datetime.datetime.strptime(game_info['game_date'], "%Y-%m-%d %H:%M") # 时间转换
new_game.player1_id=game_info.get('player1_id')
new_game.score1=game_info.get('score1')
new_game.player2_id=game_info.get('player2_id')
new_game.score2=game_info.get('score2')
new_game.confirmer_id=game_info.get('confirmer_id')
new_game.laucher_id = current_user.get_id()
new_game.lauch_date = datetime.datetime.now()
new_game.season_id = current_season
try:
db.session.add(new_game)
db.session.commit()
return {"status":"SUCCESS"}
except:
db.session.rollback()
return {"status":"FAILED"}
@app.route('/api/confirmGame',methods=['POST'])
def confirm_game(): # 审核比赛
game_info = request.get_json()
game_id=game_info.get("game_id")
game_confirm=game_info.get("confirm")
if game_id == None or game_confirm == None:
return {"status":"READY"}
game = Games.query.filter_by(id = game_id).first()
if game == None:
return {"status":"GAME_NOT_FOUND"}
if game.confirmer_id != current_user.id:
return {"status":"PERMISSION_DENIED"}
if game_confirm:
game.confirm_date = datetime.datetime.now()
game.enable = True
else:
game.lauch_date = None
try:
db.session.commit()
return {"status":"SUCCESS"}
except:
db.session.rollback()
return {"status":"FAILED"}
@app.route('/api/lauchedGames',methods=['GET'])
def get_lauched_game(): # 获取审核中比赛列表
games = Games.query.filter(and_(Games.confirmer_id == current_user.id,Games.confirm_date==None)).order_by(desc(Games.lauch_date))
game_list = []
for game in games:
game_info={}
game_info['id'] = game.id
game_info['game_date'] = game.game_date.strftime('%Y-%m-%d %H:%M')
game_info['player1_id'] = game.player1_id
game_info['player1_real_name'] = game.player1.real_name
game_info['player1_profile_file'] = game.player1.profile_file
game_info['score1'] = game.score1
game_info['player2_id'] = game.player2_id
game_info['player2_real_name'] = game.player2.real_name
game_info['player2_profile_file'] = game.player2.profile_file
game_info['score2'] = game.score2
game_info['season_name'] = game.season.season_name
game_list.append(game_info)
return {"status":"SUCCESS","Games":game_list}
@app.route('/api/myLauchedGames',methods=['GET'])
def get_my_lauched_game(): # 获取发起审核比赛列表
games = Games.query.filter(and_(Games.laucher_id == current_user.id,Games.enable==False)).order_by(desc(Games.game_date))
game_list = []
for game in games:
game_info={}
game_info['id'] = game.id
game_info['game_date'] = game.game_date.strftime('%Y-%m-%d %H:%M')
game_info['player1_id'] = game.player1_id
game_info['player1_real_name'] = game.player1.real_name
game_info['player1_profile_file'] = game.player1.profile_file
game_info['score1'] = game.score1
game_info['player2_id'] = game.player2_id
game_info['player2_real_name'] = game.player2.real_name
game_info['player2_profile_file'] = game.player2.profile_file
game_info['score2'] = game.score2
game_info['season_name'] = game.season.season_name
game_info['status'] = 'WAITING' if game.lauch_date is not None else "REJECT"
game_list.append(game_info)
return {"status":"SUCCESS","Games":game_list}
# @app.after_request
# def after_request(response):
# response.headers.add('Access-Control-Allow-Origin', '*')
# response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
# response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
# response.headers.add('Access-Control-Allow-Credentials', 'true')
# return response
if __name__ == '__main__':
with app.app_context():
db.create_all()
app.run(port=8000,host='0.0.0.0',debug=True)
\ No newline at end of file
# models.py
from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin
db = SQLAlchemy()
class User(db.Model,UserMixin):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
password = db.Column(db.String(120), unique=False, nullable=False)
is_su = db.Column(db.Boolean, unique=False, nullable=False,default=False)
is_member = db.Column(db.Boolean, unique=False, nullable=False,default=False)
real_name = db.Column(db.String(80), unique=False, nullable=True)
profile_file = db.Column(db.String(120), unique=False, nullable=True)
class Seasons(db.Model):
id = db.Column(db.Integer, primary_key=True)
season_name = db.Column(db.String(80), unique=False, nullable=True)
start_time = db.Column(db.Date, unique=False, nullable=False)
end_time = db.Column(db.Date, unique=False, nullable=True)
enable = db.Column(db.Boolean, unique=False, nullable=False,default=False)
class Games(db.Model):
id = db.Column(db.Integer, primary_key=True)
game_date = db.Column(db.DateTime, unique=False, nullable=False)
# player1_id = db.Column(db.Integer, unique=False, nullable=False)
player1_id = db.Column(db.Integer,db.ForeignKey('user.id'), unique=False, nullable=False)
player1 = db.relationship("User",foreign_keys=[player1_id],uselist=False)
score1 = db.Column(db.SmallInteger, unique=False, nullable=False)
# player2_id = db.Column(db.Integer, unique=False, nullable=False)
player2_id = db.Column(db.Integer,db.ForeignKey('user.id'), unique=False, nullable=False)
player2 = db.relationship("User",foreign_keys=[player2_id],uselist=False)
score2 = db.Column(db.SmallInteger, unique=False, nullable=False)
enable = db.Column(db.Boolean, unique=False, nullable=False,default=False)
# laucher_id = db.Column(db.Integer, unique=False, nullable=False)
laucher_id = db.Column(db.Integer,db.ForeignKey('user.id'), unique=False, nullable=False)
laucher = db.relationship("User",foreign_keys=[laucher_id],uselist=False)
lauch_date = db.Column(db.DateTime, unique=False, nullable=True)
# confirmer_id = db.Column(db.Integer, unique=False, nullable=True)
confirmer_id = db.Column(db.Integer,db.ForeignKey('user.id'), unique=False, nullable=False)
confirmer = db.relationship("User",foreign_keys=[confirmer_id],uselist=False)
confirm_date = db.Column(db.DateTime, unique=False, nullable=True)
season_id = db.Column(db.Integer,db.ForeignKey('seasons.id'), unique=False, nullable=False)
season = db.relationship("Seasons",foreign_keys=[season_id],uselist=False)
game_type = db.Column(db.Integer, unique=False, nullable=False)
class SeasonPlayers(db.Model):
id = db.Column(db.Integer, primary_key=True)
player_id = db.Column(db.Integer,db.ForeignKey('user.id'), unique=False, nullable=False)
player = db.relationship("User",foreign_keys=[player_id])
season_id = db.Column(db.Integer,db.ForeignKey('seasons.id'), unique=False, nullable=False)
season = db.relationship("Seasons",foreign_keys=[season_id])
score = db.Column(db.Integer, unique=False, nullable=False,default=0)
group = db.Column(db.Integer, unique=False, nullable=False)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
<script src="https://cdn.staticfile.org/vue/3.2.31/vue.global.min.js"></script>
<script src="https://cdn.staticfile.org/axios/1.5.0/axios.min.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model = 'msg'>
<input type="text" v-model = 'body'>
<div>{{ info }}</div>
<button @click="click">hhhh</button>
</div>
<script>
// const axiosInstance = axios.create({
// // baseURL: 'http://192.168.40.219:8080',
// // withCredentials: true, // 允许携带cookie进行跨域请求
// });
const app = Vue.createApp({
/* 根组件选项 */
data(){
return {
msg:'',
body:'',
info:''
}
},
methods:{
click(){
console.log(this.info);
this.info = "loading";
axios
.post(this.msg,this.body, {
headers: {
'Content-Type': 'application/json'
}
})
// .get(this.msg,{params:{usrname:'hhh',psword:'test1'}})
.then(response => (this.info = response.data))
.catch(function (error) { // 请求失败处理
console.log(error);
});
}
}
})
// const msg = Vue.ref('')
// const info = Vue.ref('')
app.mount('#app')
// function click(event){
// }
// const app = {
// data() {
// return {
// info: null
// }
// },
// methods:{
// click(event){
// console.log("click");
// axios
// .post('http://192.168.40.219:8080/login',{'usrname':'hhh','psword':'test1'})
// .then(response => (this.info = response.data))
// .catch(function (error) { // 请求失败处理
// console.log(error);
// });
// }
// }
// }
// Vue.createApp(app).mount('#app')
</script>
</body>
</html>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment