from flask import Flask,render_template,request,redirect
import os
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
BASE_DIR=os.path.abspath(os.path.dirname(__file__))
class Config(object):
SQLALCHEMY_DATABAES_URI='mysql://user:password@host/databese_name'
SQLALCHEMY_TRACK_MODIFICATIONS=True
SECRET_KEY='ADSFDSF'
app.config.from_object(Config)
db=SQLAlchemy(app)
class Singer(db.Model):
__tablename__='tb_singer'
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(32))
song=db.relationship('Song',backref='singer')
def __repr__(self):
return 'name:{}'.format(self.name)
class Song(db.Model):
__tablename__='tb_song'
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(32))
singer_id=db.Column(db.Integer,db.ForeignKey('tb_singer.id'))
@app.route('/')
def index():
singer_obj_list=Singer.query.all()
return render_template('index.html',singer_obj_list=singer_obj_list)
def delete_song():
id=request.args.get('id')
song_obj=Song.query.get(id)
db.session.delete(song_obj)
db.session.commit()
return redirect('/')
from flask_wtf import FlaskForm
from wtforms import StringField,SubmitField
from wtforms.validators import DataRequired
class SingerSongForm(FlaskForm):
singer_name=StringField(label='歌手',validators=[DataRequired('必填')])
song_name=StringField(label='歌曲',validators=[DataRequired('必填')])
submit=SubmitField(label='添加')
@app.route('/add_singer/',methods=['GET','POST'])
def add_singer():
dpf=SingerSongForm()
if request.method=='POST':
if dpf.validate_on_submit():
singer_name=dpf.singer_name.data
song_name=dpf.song_name.data
singer_obj = Singer(name=singer_name)
db.session.add(singer_obj)
db.session.commit()
song_obj = Song(name=song_name, singer_id=singer_obj.id)
db.session.add(song_obj)
db.session.commit()
return redirect('/')
return render_template('add_doctor.html', dpf=dpf)
if __name__ == '__main__':
db.drop_all()
db.create_all()
singer1 = Singer(name='许嵩')
singer2 = Singer(name='徐良')
singer3 = Singer(name='汪苏泷')
db.session.add_all([singer1, singer2, singer3])
db.session.commit()
p1 = Song(name='医生', singer_id=singer1.id)
p2 = Song(name='玫瑰花葬礼', singer_id=singer1.id)
p3 = Song(name='如果当时', singer_id=singer1.id)
p4 = Song(name='后会无期', singer_id=singer2.id)
p5 = Song(name='客官不可以', singer_id=singer2.id)
p6 = Song(name='坏女孩', singer_id=singer2.id)
p7 = Song(name='有点甜', singer_id=singer3.id)
p8 = Song(name='不分手的恋爱', singer_id=singer3.id)
db.session.add_all([p1, p2, p3, p4, p5, p6, p7, p8])
db.session.commit()
app.run()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<p>
<a href="/add_singer/">添加歌手</a>
</p>
<ul>
{%for singer_obj in singer_obj_list %}
<p>
主治医生:{{singer_obj.name}}
<a href="">删除歌曲</a>
</p>
{%for song_obj in singer_obj.song%}
<li>
<p>
{{song_obj.name}}
<a href="/delete_song?id={{song_obj.id}}">删除</a>
</p>
</li>
{%endfor%}
{%endfor%}
</ul>
</body>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加歌手和歌曲</title>
</head>
<body>
<form action="" method="post">
{{dpf.csrf_token}}
<p>
{{dpf.singer_name.label}}:{{dpf.singer_name}}
<span style="color: red">{{dpf.singer_name.errors.0}}</span>
</p>
<p>
{{dpf.song_name.label}}:{{dpf.song_name}}
<span style="color: red">{{dpf.song_name.errors.0}}</span>
</p>
<p>
{{dpf.submit}}
</p>
</form>
</body>
</html>