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.

225 lines
8.6 KiB

5 years ago
from flask import Flask, render_template, request, redirect
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
# 设置数据库连接
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:20000521@127.0.0.1:3306/donation'
# 定义模型
class Platform(db.Model):
platform_id = db.Column(db.String(14), primary_key=True)
name = db.Column(db.String(255), unique=True)
mobile = db.Column(db.String(15), nullable=True)
e_mail = db.Column(db.String(25), unique=True)
address = db.Column(db.String(255), nullable=False)
class unit(db.Model):
unit_id = db.Column(db.String(50), primary_key=True)
unit_name = db.Column(db.String(255), unique=True)
class Material(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(255), unique=True)
Price = db.Column(db.Float, nullable=False)
class Charity(db.Model):
id = db.Column(db.String(19), primary_key=True)
name = db.Column(db.String(255), unique=True)
mobile = db.Column(db.String(15), nullable=False)
e_mail = db.Column(db.String(50), nullable=False)
password = db.Column(db.String(16), nullable=False)
class Project(db.Model):
id = db.Column(db.String(24), primary_key=True)
name = db.Column(db.String(255), nullable=False)
propose = db.Column(db.String(255), nullable=False)
goal = db.Column(db.Integer, nullable=False)
rate = db.Column(db.Integer)
plat_id = db.Column(db.String(14), db.ForeignKey(Platform.platform_id), nullable=False)
c_id = db.Column(db.String(19), db.ForeignKey(Charity.id), nullable=False)
class support(db.Model):
Pro_id = db.Column(db.String(24), db.ForeignKey(Project.id), primary_key=True, nullable=False)
unit_id = db.Column(db.String(50), db.ForeignKey(unit.unit_id), primary_key=True, nullable=False)
ma_id = db.Column(db.Integer, db.ForeignKey(Material.id), primary_key=True, nullable=False)
number = db.Column(db.Integer, nullable=False)
class budget(db.Model):
Pro_id = db.Column(db.String(24), db.ForeignKey(Project.id), primary_key=True)
ma_id = db.Column(db.Integer, db.ForeignKey(Material.id), primary_key=True)
number = db.Column(db.Integer)
class user(db.Model):
user_ID = db.Column(db.String(20), primary_key=True)
pass_word = db.Column(db.String(16), nullable=False)
plat_id = db.Column(db.String(14), db.ForeignKey(Platform.platform_id))
class jk(db.Model):
Pro_id = db.Column(db.String(24), db.ForeignKey(Project.id), primary_key=True)
User_id = db.Column(db.String(20), db.ForeignKey(user.user_ID), primary_key=True)
money = db.Column(db.Integer, nullable=False)
# 查询捐赠项目
@app.route('/select', methods=['GET'])
def select_project(user_id):
user_id = user_id
project = db.session.query(Project.id, Project.name, Project.propose, Project.goal, Project.rate, Charity.name,
Project.plat_id).filter(Project.c_id == Charity.id).filter(
Project.plat_id == Platform.platform_id).all()
platform = Platform.query.first()
return render_template("wzjz.html", pro_list=project, plat_list=platform, user_id=user_id)
@app.route('/')
def index():
return redirect('/enter')
@app.route('/enter', methods=['GET','POST'])
def user_enter():
if request.method == 'GET':
return render_template('enter.html')
else:
user_id = request.form['user_id']
pass_word = str(request.form['password'])
ser = user.query.filter(user.user_ID == user_id).first()
if pass_word == ser.pass_word:
return select_project(user_id)
else:
return redirect('/')
# 查看项目详情
@app.route("/chakan", methods=['GET'])
def select_detail():
id = request.args.get('id')
user_id = request.args.get('user_id')
project = Project.query.filter(Project.id == id).first()
charity = Charity.query.filter(Charity.id == project.c_id).first()
yu = db.session.query(Material.name, Material.Price, budget.number).filter(Material.id == budget.ma_id).filter(
budget.Pro_id == id).all()
sp = db.session.query(unit.unit_name, Material.name, support.number).filter(unit.unit_id == support.unit_id).filter(
Material.id == support.ma_id).filter(support.Pro_id == id).all()
return render_template("chakan.html", cha_list=charity, pro=project, yu_list=yu, sp_list=sp, user_id=user_id)
@app.route('/alter', methods=['GET', 'POST'])
def donate():
if request.method == 'GET':
user_id = request.args.get('user_id')
id = request.args.get('id')
project = Project.query.filter(Project.id == id).first()
return render_template('alter.html', project=project, user_id=user_id)
else:
user_id = request.form['user_id']
id = request.form['id']
money = int(request.form['money'])
jke = jk(Pro_id=id, User_id=user_id, money=money)
db.session.add(jke)
db.session.commit()
donation = Project.query.filter(Project.id == id).first()
donation.rate = donation.rate + (money / donation.goal) * 100
db.session.commit()
return select_project(user_id)
@app.route('/insert', methods=['GET', 'POST'])
def insert_project():
if request.method == 'GET':
cha_id = request.args.get('cha_id')
plat_id = request.args.get('plat_id')
return render_template('insert.html', plat_id=plat_id, cha_id=cha_id)
else:
id = request.form['id']
name = request.form['name']
propose = request.form['propose']
goal = int(request.form['number'])
plat_id = request.form['plat_id']
c_id = request.form['cha_id']
print(plat_id)
project = Project(id=id, name=name, propose=propose, goal=goal, rate=0, plat_id=plat_id, c_id=c_id)
db.session.add(project)
db.session.commit()
pro = Project.query.filter(Project.c_id == c_id).all()
return render_template("cha_select.html", pro_list=pro)
@app.route('/delete', methods=['GET'])
def pro_delete():
id = request.args.get('pro_id')
c_id = request.args.get('cha_id')
sp = support.query.filter(support.Pro_id == id).all()
for spp in sp:
db.session.delete(spp)
db.session.commit()
bd = budget.query.filter(budget.Pro_id == id).all()
for each in bd:
db.session.delete(each)
db.session.commit()
project = Project.query.filter(Project.id == id).first()
db.session.delete(project)
db.session.commit()
pro = Project.query.filter(Project.c_id == c_id).all()
return render_template("cha_select.html", pro_list=pro)
@app.route('/cha_pass', methods=['GET', 'POST'])
def cha_project():
if request.method == 'GET':
plat_id = request.args.get('plat_id')
plat = Platform.query.filter(Platform.platform_id == plat_id).first()
return render_template("cha_pass.html", plat_id=plat)
else:
plat_id = request.form['plat_id']
cha_name = request.form['cha_name']
cha_password = request.form.get('password')
c_id = db.session.query(Charity.id).filter(Charity.name == cha_name).first()
pass_word = db.session.query(Charity.password).filter(Charity.id == c_id).first()
if cha_password == pass_word[0]:
project = Project.query.filter(Project.c_id == c_id).all()
return render_template("cha_select.html", pro_list=project)
else:
return render_template('cha_pass.html', plat_id=plat_id)
@app.route('/update', methods=['GET', 'POST'])
def pro_update():
if request.method == 'GET':
pro_id = request.args.get('id')
a = pro_id
return render_template('update.html', pro_id=a)
else:
pro_id = request.form['pro_id']
ma_name = request.form['ma_name']
number = int(request.form['number'])
area_name = request.form.get('area_name')
ma_id = db.session.query(Material.id).filter(Material.name == ma_name).first()
pro = db.session.query(Charity.id).filter(Charity.id == Project.c_id).filter(Project.id == pro_id).first()
project = Project.query.filter(Project.c_id == pro).all()
area_id = db.session.query(unit.unit_id).filter(unit.unit_name == area_name).first()
ap = support(Pro_id=pro_id, area_id=area_id[0], ma_id=ma_id[0], number=number)
db.session.add(ap)
db.session.commit()
return render_template('cha_select.html', pro_list=project)
@app.route('/jk_detail')
def jk_detail():
pro_id = request.args.get('pro_id')
jz = jk.query.filter(jk.Pro_id == pro_id)
return render_template("detail.html", jk_list = jz)
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=8800)