使用Python Django框架制作一个音乐网站,在系列文章1的基础上继续开发,本篇主要是后台歌手表模块开发。
目录
表结构设计
歌手表(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):
pass
admin.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.name
get_name.short_description = '歌手名称'
def get_portrait(self):
return self.portrait
get_portrait.short_description = '歌手头像'
def get_constellation(self):
return self.constellation
get_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.addtime
get_addtime.short_description = '创建时间'
def get_updatetime(self):
return self.updatetime
get_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 = 5
admin.site.register(Singler, SinglerAdmin)
效果:
在django中数据表到后台操作顺序为:
创建表模型->创建表迁移文件->执行表迁移->后台注册。
优化就是后台自定义管理;
比较麻烦的就是,所有表操作修改都需要创建和执行表迁移。