Skip to main content

创建电影应用

创建完项目后,接下来我们要创建应用。这个应用叫做电影应用,也就是movie。在vscode终端我们可以使用命令来创建,命令如下:

python manage.py startapp movie

创建完成后,我们会在dx_movie文件夹下看到多了一个movie文件夹,这就是movie的应用。如下图所示:

01movie文件夹.jpg

接下来我们在dx_movie/movie/models.py文件中来编写模型,因为我们的项目中需要用到电影的分类以及电影的信息,这些分类主要包含了电影、综艺、纪录片、短片等等。如下图所示:

02电影项目分类.jpg

所以我们要创建一个category分类。模型的创建细节在前面已经详细讲解过,这里就不再赘述了。代码如下:

from django.db import models

class Category(models.Model):
# 分类信息
id = models.AutoField(primary_key=True) # 自增主键字段
category_name = models.CharField(max_length=100, verbose_name='分类名') # 分类名字段,最大长度为100

class Meta:
db_table = u'category' # 数据库表名
verbose_name = '分类管理' # 在Admin后台显示的单个对象的名称
verbose_name_plural = '分类管理' # 在Admin后台显示的对象列表的名称

def __str__(self):
return self.category_name # 返回对象的字符串表示形式,即分类名

创建了category分类之后,接着我们再来创建一个电影的类,叫做movie。这个电影下面的字段比较多,包括id、电影名称、上映年份、导演、编剧、主演等等。地区是写死的,我们用一个region表示。另外,还有一个字段是Hot,表示是否为热门,是否为置顶,它们都是布尔值。还有一个可选项是quality,表示视频质量。在dx_movie/movie/models.py文件中来继续编写代码:

from django.db import models

# 地区选项
Region = [
(1, '中国大陆'),
(2, '中国香港'),
(3, '中国台湾'),
(4, '美国'),
(5, '韩国'),
(6, '日本'),
(7, '其他')
]
# 清晰度选项
Quality = [
(1, '720P'),
(2, '1080P'),
(3, '4K')
]

# 热门精选选项
Hot = [
(False, '否'),
(True, '是')
]
# 置顶选项
Top = [
(False, '否'),
(True, '是')
]
# 是否限制选项
SHOW = [
(False, '否'),
(True, '是')
]
# 是否免费选项
FREE = [
(False, '否'),
(True, '是')
]

class Category(models.Model):
# 分类信息
id = models.AutoField(primary_key=True) # 自增主键
category_name = models.CharField(max_length=100, verbose_name='分类名') # 分类名

class Meta:
db_table = 'category' # 数据库表名
verbose_name = '分类管理' # 在Admin后台显示的单个对象的名称
verbose_name_plural = '分类管理' # 在Admin后台显示的对象列表的名称

def __str__(self):
return self.category_name # 返回对象的字符串表示形式,即分类名


class Movie(models.Model):
# 电影信息
id = models.AutoField(primary_key=True) # 自增主键
movie_name = models.CharField(max_length=100, verbose_name='电影名') # 电影名
release_year = models.IntegerField(verbose_name='上映年份') # 上映年份
director = models.CharField(max_length=100, verbose_name='导演') # 导演
scriptwriter = models.CharField(max_length=100, verbose_name='编剧') # 编剧
actors = models.CharField(max_length=200, verbose_name='主演') # 主演
region = models.SmallIntegerField(choices=Region, verbose_name='地区') # 地区
types = models.CharField(max_length=50, verbose_name='类型') # 类型
language = models.CharField(max_length=100, verbose_name='语言') # 语言
release_date = models.DateField(verbose_name='上映日期') # 上映日期
duration = models.CharField(max_length=50, verbose_name='时长(或集数)') # 时长(或集数)
alternate_name = models.CharField(max_length=100, blank=True, verbose_name='又名') # 又名,可选
image_url = models.CharField(max_length=300, blank=True, verbose_name='图片链接') # 图片链接,可选
rate = models.FloatField(blank=True, verbose_name='豆瓣评分') # 豆瓣评分,可选
review = models.TextField(max_length=500, blank=True, verbose_name='简介') # 简介,可选
is_hot = models.BooleanField(choices=Hot, default=False, verbose_name='是否热门') # 是否热门
is_top = models.BooleanField(choices=Top, default=False, verbose_name='是否置顶') # 是否置顶
quality = models.SmallIntegerField(choices=Quality, blank=False, verbose_name='清晰度') # 清晰度
subtitle = models.CharField(max_length=100, blank=True, verbose_name='字幕') # 字幕,可选
update_info = models.CharField(max_length=100, blank=True, verbose_name='更新信息') # 更新信息,可选
update_progress = models.CharField(max_length=100, blank=True, verbose_name='更新进度') # 更新进度,可选
download_info = models.TextField(max_length=500, blank=True, verbose_name='网盘信息',
help_text="每个网盘信息占一行,每个字段用网盘名:网址 提取码:字符 组成(无提取码不写)。 如 百度网盘:http://www.baidu.com 提取码:8888 ") # 网盘信息,可选
is_show = models.BooleanField(choices=SHOW, default=True, verbose_name='是否显示') # 是否显示
is_free = models.BooleanField(choices=FREE, default=False, verbose_name='是否免费') # 是否免费
category = models.ForeignKey(Category, blank=False, verbose_name='分类名', on_delete=models.CASCADE) # 分类名,外键

class Meta:
db_table = 'movie' # 数据库表名
verbose_name = '电影管理' # 在Admin后台显示的单个对象的名称
verbose_name_plural = '电影管理' # 在Admin后台显示的对象列表的名称

def __str__(self):
return self.movie_name # 返回对象的字符串表示形式,即电影名

接下来我们在dx_movie/dx_movie/settings.py文件中找打INSTALLED APPS代码块,把movie应用加上去,代码如下:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'movie',
]

接下来我们在vscode终端要执行迁移操作来生成数据表,命令如下:

python manage.py makemigrations
python manage.py makemigrations
python manage.py migrate

创建完成后,我们再来看一下我们的数据表,这里就新增一个movie表格和一个category表,如图所示:

03新增movie表.jpg

接下来我们就可以在后台进行分类和电影的操作,需要在movie文件夹下面找到一个admin.py,并将它注册到后台上。代码如下:

from django.contrib import admin
from movie.models import Movie, Category

# 注册电影模型类
admin.site.register(Movie)
# 注册分类模型类
admin.site.register(Category)

接下来我们在vscode终端输入命令如下:

python manage.py runserver

启动服务后,我们可以在浏览器中输入127.0.0.1:8000/admin,然后在后台进行增删改查操作,比如添加分类和电影等等。如下图所示:

04电影管理和分类管理.jpg

数据量比较大的话,我给大家提供可以执行提供的SQL文件,将所有的电影信息全部导入进来。导入完成后,刷新页面,就可以看到电影列表中已经添加了所有电影信息。如下图所示:

05moviesql文件

接下来我们复制sql文件的全部信息,在Navicat可视化软件中来执行一下,如下图所示:

06导入Navicat

接下来我们点击执行按钮,如下图所示:

07执行按钮.jpg

接下来回到我们的后台的电影管理中,我们就导入多条的电影记录,如下图所示:

08电影导入

这样,我们就完成了电影这个应用的添加。