首页 > 其他分享 >Django音乐网站项目(1)

Django音乐网站项目(1)

时间:2023-05-11 22:45:04浏览次数:36  
标签:音乐网站 Varchar name 项目 models Django 歌曲 类型 长度

  今天开始,我们就用Django试着搭建一个音乐类的网站。首先,我们需要对项目进行设计,最好手绘画出草图。本节主要以项目架构设计、功能配置、数据架构表设计和定义模型类四点为主,为项目的开发做一些准备。

一、项目架构设计

  我们对音乐网站的需求与设计有了大概了解,下一步根据需求搭建项目的目录结构。

  • 首先在命令提示符窗口或者pyCharm中创建Django项目,项目命名为music

  • 然后在项目中分别创建项目应用index、ranking、play、comment、search和user(配置文件记得添加)

  • 并在每个项目应用中创建子路由文件urls.py

  • 最后在项目的根目录中创建media、publicStatic和templates文件夹

  整个项目的目录结构如图所示:

  

  在settings.py配置文件添加app

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'index',
    'ranking',
    'user',
    'play',
    'search',
    'comment',
]

  新建的项目应用和文件夹说明如下:

1、媒体资源文件夹(media)

  用于存放歌曲文件、歌曲图片、歌词文件等资源文件,这类资源文件的变动频率较高,因此与静态资源分开不同的存储路径。在 media 文件夹中分别创建 songFile、songLyric和songImg文件夹,每个文件夹说明如下;

  • songFile存放歌曲的文件

  • songLyric存放歌词的文件

  • songImg存放歌曲封面的文件

2、静态资源文件夹(publicStatic)

  存放网页的CSS样式文件、JavaScript脚本文件和网页图片文件等静态资源。

  由于项目创建了多个应用,如果在每个应用里面单独创建静态文件夹,当更新或修改网页布局时,就不利于日后的维护和管理。

  在 publicStatic 文件夹中分别创建css、font、image、js文件夹和favicon.ico文件,说明如下:

  • css文件夹存放网站的CSS样式文件

  • js文件夹存放网站的JavaScript脚本文件

  • font文件夹存放网站字体的文件

  • image文件夹存放网站设计的图片

  • favicon.ico文件是网站的图标

3、模板文件夹(templates)

  存放模板文件,本项目一共使用9个模板文件,每个模板文件的说明如下:

  • base.html:定义项目的公用模板文件

  • index.html:实现音乐网站首页

  • ranking.html:实现榜单排行页面

  • play.html:实现歌曲播放页面

  • comment.html:实现歌曲点评页面

  • search.html:实现歌曲搜索页面

  • user.html:实现用户注册和登录页面

  • home.html:实现用户中心页面

  • 404.html:实现404和500异常页面

二、功能配置

  项目的目录结构设计并不是一成不变的,不同的需求与设计都会导致项目的目录结构有所不同。

  下一步对项目进行相关配置,配置信息主要在配置文件settings.py中完成。

  首先确保新建的项目应用index、ranking、paly、comment、search和user写入配置属性INSTALLED_APPS里面,然后在配置属性MIDDLEWARE中添加中LocaleMiddleware,使Admin后台系统支持中文语言。

配置代码如下:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 添加中间键 LocaleMiddleware
    'django.middleware.locale.LocaleMiddleware',
]

  项目的数据存储采用MySQL数据库,我们在MySQL中创建数据库music_db,并在配置属性DATABASES中设置MySQL的链接方式。

配置代码如下:

# 设置数据库连接信息
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'music_db',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

  最后将静态资源文件夹publicStatic和媒体资源文件夹media引入Django的运行环境,同时将Django内置用户模型User改为项目应用user的自定义模型MyUser,配置代码如下:

# 配置自定义用户表MyUser
AUTH_USER_MODEL = 'user.MyUser'

# 静态资源文件路径
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'publicStatic']
STATIC_ROOT = BASE_DIR / 'static'

# 媒体资源的保存路径
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'

  到这里,音乐网站的开发环境基本上已搭建完毕。在整个项目搭建过程中,可以总结出Django开发环境的搭建流程,说明如下:

(1)创建Django项目,根据开发需求创建相应的项目应用、静态资源文件夹、媒体资源文件夹和模板文件夹。

(2)在项目的settings.py中设置功能配置,常用的配置属性有INSTALLED_APPS、MIDDLEWARE、TEMPLATES、DATABASES、STATICFILES_DIRS、MEDIA_URL和MEDIA_ROOT等。

三、数据架构表设计

  从网站的开发需求与网站设计得知,歌曲信息是整个网站最为核心的数据。

  因此,设计网站的数据结构时,应以歌曲信息为核心数据,逐步向外扩展相关的数据信息。我们将歌曲信息的数据表命名为song。

1、歌曲信息表

表字段 字段类型 含义
id Int类型,长度为11 主键
name Varchar类型,长度为50 歌曲名称
singer Varchar类型,长度为50 歌曲的演唱歌手
time Varchar类型,长度为50 歌曲的播放时长
album Varchar类型,长度为50 歌曲所属专辑
languages Varchar类型,长度为50 歌曲的语种
type Varchar类型,长度为50 歌曲的风格类型
release Date类型 歌曲的发行时间
img Varchar类型,长度为100 歌曲封面图片路径
lyrics Varchar类型,长度为100 歌曲的歌词文件路径
file Varchar类型,长度为100 歌曲的文件路径
label_id Int类型,长度为11 外键,关联歌曲分类表

  歌曲信息表记录了歌曲的基本信息,如歌名、歌手、时长、专辑等等,其中歌曲封面、歌词和歌曲文件是以文件路径的形式记录在数据库中的,一般来说如果网站中涉及文件的存储和使用,那么数据库最好记录文件的路径地址。若将文件内容以二进制的数据格式写入数据库,则会对数据库造成一定的压力,从而降低网站的响应速度。

2、歌曲分类表

  歌曲信息表关联歌曲分类表,我们将歌曲分类表命名为label,歌曲分类表主要实现排行榜的歌曲筛选功能。

表字段 字段类型 含义
id Int类型,长度为11 主键
name Varchar类型,长度为10 歌曲的分类标签

3、歌曲动态表

  项目需求涉及歌曲的动态信息,因此延申出了歌曲动态表。

  歌曲动态表用于记录歌曲的播放次数、搜索次数个下载次数,并且与歌曲信息表实现一对一的数据关系,也就是一首歌曲只有一条动态信息。将歌曲动态表命名为dynamic。

表字段 字段类型 含义
id Int类型,长度为11 主键
plays Int类型,长度为11 歌曲的播放次数
search Int类型,长度为11 歌曲的搜索次数
download Int类型,长度为11 歌曲的下载次数
song_id Int类型,长度为11 外键,关联歌曲信息表

4、歌曲点评表

  该表主要用于歌曲点评页面。

  从歌曲点评页面知道,一首歌可以有多条点评的信息,说明歌曲信息表和歌曲点评表存在一对多的数据关系。

  将歌曲点评表命名为comment。

表字段 字段类型 含义
id Int类型,长度为11 主键
text Varchar类型,长度为500 歌曲的点评内容
user Varchar类型,长度为20 用户名
date Date类型 点评日期
song_id Int类型,长度为11 外键,关联歌曲信息表

5、用户表

  还有网站的用户管理功能需要实现。

  由用户表提供用户信息。用户表由Django内置模型User扩展而成。

表字段 字段类型 含义
id Int类型,长度为11 主键
password Varchar类型,长度为128 用户密码
last_login Datetime类型,长度为6 上次登录的时间
is_superuser Tinyint类型,长度为1 超级用户
username Varchar类型,长度为150 用户名
first_name Varchar类型,长度为30 用户的名字
last_name Varchar类型,长度为150 用户的姓氏
email Varchar类型,长度为254 邮箱地址
is_staff Tinyint类型,长度为1 登录Admin权限
is_active Tinyint类型,长度为1 用户的激活状态
date_joined Datetime类型,长度为6 用户创建的时间
qq Varchar类型,长度为20 用户的QQ号码
weChat Varchar类型,长度为20 用户的微信号码
mobile Varchar类型,长度为11 用户的手机号码

四、定义模型类

  我们根据数据表的数据关系定义项目的模型对象,由于项目所有的项目应用都使用这些模型生成网页内容,而且模型之间存在外键关联,因此将所有关于歌曲信息的模型都定义在项目应用index中。

  打开项目应用index的models.py,分别定义模型Label、Song、Dynamic和Comment。

代码如下:

# 歌曲分类表
class Label(models.Model):
    id = models.AutoField('序号', primary_key=True)
    name = models.CharField('分类标签', max_length=10)

    def __str__(self):
        return self.name

    class Meta:
        # 设置Admin的显示内容
        verbose_name = '歌曲分类'
        verbose_name_plural = '歌曲分类'

# 歌曲信息表
class Song(models.Model):
    id = models.AutoField('序号', primary_key=True)
    name = models.CharField('歌名', max_length=50)
    singer = models.CharField('歌手', max_length=50)
    time = models.CharField('时长', max_length=10)
    album = models.CharField('专辑', max_length=50)
    languages = models.CharField('语种', max_length=20)
    type = models.CharField('类型', max_length=20)
    release = models.DateField('发行时间')
    img = models.FileField('歌曲图片', upload_to='songImg/')
    lyrics = models.FileField('歌词', upload_to='songLyric/', default='暂无歌词', blank=True)
    file = models.FileField('歌曲文件', upload_to='songFile/')
    label = models.ForeignKey(Label, on_delete=models.CASCADE, verbose_name='歌名分类')

    def __str__(self):
        return self.name

    class Meta:
        # 设置Admin的显示内容
        verbose_name = '歌曲信息'
        verbose_name_plural = '歌曲信息'
        
# 歌曲动态表
class Dynamic(models.Model):
    id = models.AutoField('序号', primary_key=True)
    song = models.ForeignKey(Song, on_delete=models.CASCADE, verbose_name='歌名')
    plays = models.IntegerField('播放次数', default=0)
    search = models.IntegerField('搜索次数', default=0)
    download = models.IntegerField('下载次数', default=0)

    class Meta:
        # 设置Admin的显示内容
        verbose_name = '歌曲动态'
        verbose_name_plural = '歌曲动态'

# 歌曲点评表
class Comment(models.Model):
    id = models.AutoField('序号', primary_key=True)
    text = models.CharField('内容', max_length=500)
    user = models.CharField('用户', max_length=20)
    date = models.DateField('日期', auto_now=True)
    song = models.ForeignKey(Song, on_delete=models.CASCADE, verbose_name='歌名')

    class Meta:
        # 设置Admin的显示内容
        verbose_name = '歌曲评论'
        verbose_name_plural = '歌曲评论'

  用户表由Django内置模型User扩展而成,它与歌曲信息表并无数据关联,因此将用户表的模型定义在项目应用user的models.py中。

代码如下:

from django.contrib.auth.models import AbstractUser

class MyUser(AbstractUser):
    qq = models.CharField('QQ号码', max_length=20)
    weChat = models.CharField('微信账号', max_length=20)
    mobile = models.CharField('手机号码', max_length=11, unique=True)
    # 设置返回值
    def __str__(self):
        return self.username

  最后对定义好的模型执行数据迁移。

  我们使用数据库可视化工具查看所有关于歌曲信息的数据表,数据表之间的数据关系如下所示:

  本节就音乐项目的前期准备已经完成,主要是项目架构设计、功能配置、数据架构表设计和定义模型类四点。其中最为核心的点是数据架构表设计,这个在实现时一定要特别注意,不然后续再改动表结构就会很难受。待后续....

标签:音乐网站,Varchar,name,项目,models,Django,歌曲,类型,长度
From: https://www.cnblogs.com/LoLong/p/17392466.html

相关文章

  • 基于Pytorch的简单深度学习项目实战
    基于Pytorch的简单深度学习项目实战_pytorch深度学习项目实战_NPC_0001的博客-CSDN博客基于以上补充:所需数据阿里网盘分享:(暂不支持分享,后续补上)代码:importtorch.utils.dataimporttorchvisionfromtorchimportnnfromtorch.utils.tensorboardimportSummaryWriterd......
  • vue项目中封装localStorage和sessionStorage
    1.为什么需要封装localStorage和sessionStorage?因为封装localStorage和sessionStorage可以提高程序的维护性、可重用性和扩展性,同时也可以使代码更为简单、易懂。2.以下是一个简单的代码封装示例可以新建一个utils目录文件,在该文件下新建storage.js文件进行封装//封装local......
  • Spring项目的相关准备
    导入jar包只需要导入这个核心jar包其余包也就能够正常使用啦!简单练习再spring官网找到xml配置文件的框架,复制到我们自己的项目里面网址:https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-introduction写入bean配置然后在test的java......
  • MAVEN项目打包后提示没有主清单属性解决方案
    1、普通maven项目中打包后运行提示没有主清单属性解决方案<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId>......
  • questions_03 【http://127.0.0.1:8000/%5Emanage/(%3FP1%5Cd+)/dashboard/】项目id参
    【原因背景】当我们在点击进入具体项目的时候,根据我们所写的url,中间应该包含我们的项目id,当不知道什么原因可以进入项目,但是id是乱码的【原因分析】在查看相关资料后发现是我们在写path的时候出现的问题:Django2.2.x之后的版本path:用于普通路径,不需要自己手动添加正则首位......
  • Day_09 项目下拉
    1.切换菜单1.1*从数据库中获取:我创建的我参与的1.2循环显示1.3当前页面需要显示/其他页面也需要显示【inclusion_tag】#1.在注册app下创建文件templatetags/project.pyfromdjango.templateimportLibraryfromwebimportmodelsregister=Library()@regi......
  • 在PhpStorm项目工具窗口中显示.idea文件夹
    转自:https://www.codenong.com/33010238/ 对于.idea,它也有专用的注册表设置(默认情况下,我至少在PhpStorm中启用了此设置)Help|FindAction...并查找registry(或在Windows上使用默认键盘映射通过Maintenance Ctrl+Alt+Shift+/)进入内部-查找projectView.hide.dot.idea条......
  • 项目Redis缓存设计心得体会
    1,列表类缓存比如一些列表类的缓存,如果列表是跟用户无关的,可以直接对查询的列表进行缓存,比如省份列表、菜单列表等。但是如果列表里面有跟用户相关的属性,比如文档的卡片列表里有用户是否下载过,设计缓存需要注意,可以将用户无关的卡片列表组装后进行缓存,上面的【已下载】【......
  • 三层架构——IDEA项目部署
    一、前提:1、数据库部署2、Tomcat设置3、数据库添加 二、步骤:1、创建maven模块(设置Name,修改Groupld)2、转为web版本(JBLJavaToWeb),添加依赖pom.xml——依赖(素材包中)3、导入素材webapp——webapp(素材包中)4、创建包结构javacom.域名domain实体类包......
  • Apache DolphinScheduler 开源之夏学生项目申请开启,6 大课题等你来拿万元奖金!
    开源之夏2023学生报名已经正式开启!ApacheDolphinScheduler今年继续参与开源之夏的活动,2023年4月29日-6月3日15:00UTC+8,同学们可以在开源之夏官网https://summer-ospp.ac.cn/找到ApacheDolphinScheduler下的项目,挑选自己感兴趣的课题,通过项目相对应导师联系方......