Python Flask音乐网:数据库设计

来自CloudWiki
跳转至: 导航搜索

创建数据库

create database music default character set utf8;

数据表模型

user表

存储用户的信息

song表

存储歌曲的信息

arttist表

存储歌手的信息

collect表

存储收藏表的信息

创建模型

安装第三方库

pip install

Flask==0.12.2
flask_script==2.0.6
Flask-SQLAlchemy==2.3.2
PyMySQL==0.8.0
SQLAlchemy==1.2.4
Werkzeug==0.14.1

配置

from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)  # 创建一个Flask app对象
# 数据库链接的配置,此项必须,格式为(数据库+驱动://用户名:密码@数据库主机地址:端口/数据库名称)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:000000@localhost:3306/music'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # 跟踪对象的修改,在本例中用不到调高运行效率,所以设置为False
db = SQLAlchemy(app=app)  # 为哪个Flask app对象创建SQLAlchemy对象,赋值为db
manager = Manager(app=app)  # 初始化manager模块

@app.route('/')
def hello_world():
    reutrn 'Hello World!'

if __name__ == '__main__':
    manager.run()  # 运行服务器


py -3.7 manager.py runserver

Flask-Script的作用

Flask的Web开发服务器支持很多启动设置选项,但只能在脚本中作为参数传给app.run()函数。

这种方式很不方便,传递设置选项的理想方式是使用命令行参数。

Flask-Script就是这么一个Flask扩展工具,为Flask程序添加一个命令行解析器。

简单地说,Flask-Script的作用就是可以通过命令行的形式来操作Flask。如,通过命令行跑一个开发版本的服务器、设置数据库等。

参考文档:https://zhuanlan.zhihu.com/p/269820011

声明模型

这里的模型就的我们口中通常说的MTV中Model,显然app.py 中用@app.route()装饰器装饰的就是View了,Templates中存在的html模板文件就的我们的T了。

这里简单的写一个Model

app/models.py:

from manager import db  # 导入manager文件中的SQLAlchemy对象

# class Student(db.Model):  # 继承SQLAlchemy.Model对象,一个对象代表了一张表
#     s_id= db.Column(db.Integer, primary_key=True, autoincrement=True, unique=True)  # id 整型,主键,自增,唯一
#     s_name = db.Column(db.String(20))  # 名字 字符串长度为20
#     s_age = db.Column(db.Integer, default=20)  # 年龄 整型,默认为20

#     __tablename__ = 'student'  # 该参数可选,不设置会默认的设置表名,如果设置会覆盖默认的表名
#     def __init__(self, name, age):  # 初始化方法,可以对对象进行创建
#         self.s_name = name
#         self.s_age = age
#     def __repr__(self):  # 输出方法,与__str__类似,但是能够重现它所代表的对象
#         return '<Student %r, %r, %r>' % (self.s_id, self.s_name, self.sage)


# 用户表
class User(db.Model):
    __tablename__ = "user"
    id = db.Column(db.Integer, primary_key=True)             # 编号
    username = db.Column(db.String(100))                     # 用户名
    pwd = db.Column(db.String(100))                          # 密码
    flag = db.Column(db.Boolean,default=0)                   # 用户标识,0:普通用户 1:管理员

    def __repr__(self):
        return '<User %r>' % self.name

    def check_pwd(self, pwd):
        """
        检测密码是否正确
        :param pwd: 密码
        :return: 返回布尔值
        """
        from werkzeug.security import check_password_hash
        return check_password_hash(self.pwd, pwd)

# 歌手表
class Artist(db.Model):
    __tablename__ =  'artist'
    id = db.Column(db.Integer, primary_key=True)             # 编号
    artistName = db.Column(db.String(100))                    # 歌手名
    style = db.Column(db.Integer)                             # 歌手类型
    imgURL = db.Column(db.String(100))                        # 头像
    isHot = db.Column(db.Boolean,default=0)                   # 是否热门

# 歌曲表
class Song(db.Model):
    __tablename__ = 'song'
    id = db.Column(db.Integer, primary_key=True)              # 编号
    songName = db.Column(db.String(100))                      # 歌曲名称
    singer = db.Column(db.String(100))                        # 歌手名称
    fileURL = db.Column(db.String(100))                       # 歌曲图片
    hits = db.Column(db.Integer,default=0)                    # 点击量
    style = db.Column(db.Integer)                             # 歌曲类型 0:全部 1:华语 2:欧美 3:日语 4:韩语 5 其他
    collect = db.relationship('Collect', backref='song')      # 收藏外键关系关联

# 歌曲收藏
class Collect(db.Model):
    __tablename__ = "collect"
    id = db.Column(db.Integer, primary_key=True)              # 编号
    song_id = db.Column(db.Integer, db.ForeignKey('song.id')) # 所属歌曲
    user_id = db.Column(db.Integer)                           # 所属用户


在python7 交互式条件下输入:

>>> from manager import db

>>> from models import *

>>> db.create_all()

数据表即建立起来,

mysqL 后台验证:

mysql> use music;

Database changed

mysql> show tables;

+-----------------+
| Tables_in_music |
+-----------------+
| artist          |
| collect         |
| song            |
| student         |
| user            |
+-----------------+
5 rows in set (0.00 sec)


参考文档:

[1] flask三、Flask-SQLAlchemy 的使用 : https://www.jianshu.com/p/8c038f0134f8

[2] Flask-SQLAlchemy详解 https://www.jianshu.com/p/f7ba338016b8