使用Python Django框架制作一个音乐网站,在系列文章1的基础上继续开发,本篇主要是后台歌手表模块开发。
目录
表结构设计
歌手表(singer)结构
创建表模型
设置图片上传路径
创建上传文件目录
生成表迁移
执行创建表
后台管理表模型
歌手表模型操作
新增
编辑、删除
优化歌手记录列表
总结
表结构设计
歌手表(singer)结构
字段 | 类型 | 注释 |
id | int(11) | 歌手表id |
name | varchar(50) | 用户名 |
pinyin | varchar(50) | 名称拼音 |
portrait | varchar(200) | 头像链接 |
first_letter | varchar(15) | 名称首字母 |
gender | tinyint(2) | 性别0女 1男 |
birthday | varchar(20) | 生日 |
height | int(4) | 身高(cm) |
weight | int(3) | 体重(kg) |
constellation | varchar(50) | 星座 |
single_num | int(11) | 单曲数 |
album_num | int(11) | 专辑数 |
desc | text(0) | 简介 |
addtime | int(11) | 添加时间 |
updatetime | int(11) | 编辑时间 |
创建表模型
在player工程目录下的models.py中创建歌手表模型。
内容如下:
from django.db import models
from datetime import date, datetime# Create your models here.
class Singler(models.Model):""" 歌手表模型 """name = models.CharField(max_length=50, help_text='请输入歌手名称')first_letter = models.CharField(max_length=15, help_text='请输入歌手名称首字母')# 设置上传位置portrait = models.ImageField(upload_to='uploads/%Y%m%d%H/', help_text='请上传歌手照片')birthday = models.DateField(default=date.today, help_text='请选择歌手生日')height = models.IntegerField(help_text='请输入歌手身高(cm)', default=0, blank=True)weight = models.IntegerField(help_text='请输入歌手体重(kg)', default=0, blank=True)constellation = models.CharField(max_length=50, help_text='请输入歌手星座')single_num = models.IntegerField(default=0)album_num = models.IntegerField(default=0)desc = models.TextField(help_text='请输入歌手简介')addtime = models.DateTimeField(auto_now_add=True)updatetime = models.DateTimeField(auto_now=True)
设置图片上传路径
在myMusic/settings.py中最下方设置。
# 设置文件上传位置
MEDIA_ROOT = 'static/'
创建上传文件目录
在myMusic目录下创建static文件夹。
如图:
生成表迁移
python manage.py makemigrations
执行过程:
执行创建表
python manage.py migrate
创建表结构如下:
CREATE TABLE `player_singler` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`first_letter` varchar(15) NOT NULL,`portrait` varchar(100) NOT NULL,`birthday` date NOT NULL,`height` int(11) NOT NULL,`weight` int(11) NOT NULL,`constellation` varchar(50) NOT NULL,`single_num` int(11) NOT NULL,`album_num` int(11) NOT NULL,`desc` longtext NOT NULL,`addtime` datetime(6) NOT NULL,`updatetime` datetime(6) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
后台管理表模型
在player目录下admin.py中注册歌手表模型到后台。
from django.contrib import admin
from .models import Singler# Register your models here.
class SinglerAdmin(admin.ModelAdmin):passadmin.site.register(Singler, SinglerAdmin)
歌手表模型操作
新增
点击表模型旁边增加按钮,即可进入新增界面,增加一条新的歌手记录。
写完后,点击最下方的保存按钮;新增成功后,可在列表查看新增记录。
编辑、删除
通过表模型数据列表,点击进入歌手数据详情。
歌手数据详情可编辑,也可点击下方删除按钮,删除数据。
优化歌手记录列表
修改player/admin.py。
from django.contrib import admin
from .models import Singler# Register your models here.
class SinglerAdmin(admin.ModelAdmin):# 列表页属性def get_name(self):return self.nameget_name.short_description = '歌手名称'def get_portrait(self):return self.portraitget_portrait.short_description = '歌手头像'def get_constellation(self):return self.constellationget_constellation.short_description = '星座'def get_height(self):return str(self.height) + 'cm'get_height.short_description = '身高'def get_weight(self):return str(self.weight) + 'kg'get_weight.short_description = '体重'def get_addtime(self):return self.addtimeget_addtime.short_description = '创建时间'def get_updatetime(self):return self.updatetimeget_updatetime.short_description = '更新时间'# 显示字段list_display = ['id', get_name, get_portrait, get_constellation, get_height, get_weight, get_addtime, get_updatetime]# 过滤器list_filter = ['name', 'constellation']# 搜索search_fields = ['name', 'constellation']# 分页list_per_page = 5admin.site.register(Singler, SinglerAdmin)
效果:
总结
在django中数据表到后台操作顺序为:
创建表模型->创建表迁移文件->执行表迁移->后台注册。
优化就是后台自定义管理;
比较麻烦的就是,所有表操作修改都需要创建和执行表迁移。