Flask--orm小案例

from flask import Flask,render_template,request,redirect
import os
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 1.配置数据库的信息
BASE_DIR=os.path.abspath(os.path.dirname(__file__))

class Config(object):
    # 连接数据库
    SQLALCHEMY_DATABAES_URI='mysql://user:password@host/databese_name'
    #设置sqlalchemy自动更新
    SQLALCHEMY_TRACK_MODIFICATIONS=True
    #加密盐
    SECRET_KEY='ADSFDSF'


app.config.from_object(Config)

#2.创建SqlAlchemy对象
db=SQLAlchemy(app)

#3.创建数据模型

#歌手:QQ音乐三巨头
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'))

# 4.路由和视图
@app.route('/')
def index():
    #1.查询所有的singer
    singer_obj_list=Singer.query.all()
    #2.返回页面
    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('/')

#form组件
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':
        # 1. 校验
        if dpf.validate_on_submit():
            #1.获取数据
            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()
            # 3.重定向
            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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值