抱歉,你查看的文章不存在

重新开始一个完整的Django Restful WEB项目

编程应用、实战教程,不容错过

在前面7章中,我们首先编写了一个简单的电影爬虫,采集了猫眼电影的部分电影数据,再通过Django框架的2.0版本创建了一个Python WEB应用,并且借助于django-rest-framework模块,将Django Web应用改造成了一个提供Restful风格API接口的项目。

Django作为一个MTV架构的Web框架,通过数据模型提供数据,通过视图函数处理HTTP请求,通过模板渲染数据,便捷且高效。

而django-rest-framework模块则通过序列化器对数据模型的数据进行序列化,通过渲染器将序列化后的数据渲染为相应格式的数据,通过解析器接收客户端传递的数据并解析为序列化器可接受的数据形式。

通过上面的学习,我们大致了解了Django框架和django-rest-framwork模块的使用,但是上面创建的项目距离实际环境下的项目还是有很大的差距。我们在接下来的章节中,重新创建一个Django项目,充分使用Django2.0 和django-rest-franmwork模块的特性,完成一个完整的基于Django 2.0、提供Restful风格接口的Web服务。

1、规划项目和项目模型

在这个新的Django项目中,我们依然以电影为主题,与之前的项目不同的是,本次的项目引入用户系统,容许用户对电影进行评分(类似于豆瓣电影等电影评分网站)。

所以我们的Django中需要涉及到不止一个数据模型,它们分别是:

  • 电影分类模型:存储电影的分类数据;
  • 电影模型:存储电影数据;
  • 用户模型:存储用户数据;
  • 用户评分模型:存储用户对电影的评分数据;

其中,电影分类模型包含:

  • 电影分类字段

电影模型包含:

  • 链接到电影分类模型的外键字段;
  • 电影名称字段;
  • 上映时间字段;
  • 是否观看字段;
  • 数据创建时间字段;

用户模型包含:

  • 用户性别字段;
  • 用户姓名字段;
  • 数据创建时间字段;

用户评分字段则包含:

  • 链接到用户模型的外键字段;
  • 链接到电影模型的外键字段;
  • 电影分数字段;
  • 评分日期字段;

2、创建Django项目和数据模型

上面规划好本次项目的模型之后,我们照例创建一个Django项目并进行相关的应用和数据模型的创建。

2.1、创建Django项目和应用

在命令行窗口使用django-admin命令的startproject选项创建一个Django项目:

django-admin startproject movieapi_new

接着进行movieapi目录,使用manage.py工具的startapp命令选项创建一个Django项目的应用:

python manage.py startapp userscore

这样,我们的Django项目和应用就已经创建完成。

2.2、设置Django项目

在Django项目和应用创建完成之后,我们也照例对项目进行一下基本的设置。

在setting.py文件中将userscore应用和django-rest-framwork模块添加到应用列表中:

# 代码位于/movieapi_new/movieapi_new/settings.py文件中
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'userscore',
]

其他就没有多少设置的了,另外因为本机只作演示,所以项目的数据库使用的还是文件型的sqlit3,如果有需要使用其他数据库的同学,请自行修改settings.py文件中DATABASES的内容,比如使用MySQL需要修改为:

DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'movies',
    'USER': 'test1',
    'PASSWORD': 'asd@asd',
    'HOST': '127.0.0.1',
    'PORT': '3306',
    }
}

同时在settings.py同级目录的__init__.py文件中添加以下代码:

import pymysql
pymysql.install_as_MySQLdb()

2.3、创建数据模型

在将所需的应用和模块添加到项目中之后,我们来创建上一节设计的数据模型。

首先在/movieapi_new/userscore/models.py文件中写入以下代码:

from django.db import models

# 电影分类模型
class MovieCategory(models.Model):
    name = models.CharField(max_length=200,verbose_name='电影分类')

    class Meta:
        ordering = ('name',)
        verbose_name = '电影分类'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

# 电影模型
class Movie(models.Model):
    name = models.CharField(max_length=200,verbose_name='电影名')
    movie_category = models.ForeignKey(MovieCategory,related_name='电影分类',on_delete=models.CASCADE)
    release_date = models.DateField(verbose_name='上映时间')
    viewed = models.BooleanField(default=False,verbose_name='是否观看')
    created = models.DateTimeField(auto_now_add=True,verbose_name='创建时间')

    class Meta:
        ordering = ('name',)
        verbose_name = '电影'
        verbose_name_plural = verbose_name


    def __str__(self):
        return self.name

# 观众模型
class Viewer(models.Model):
    MALE = 'M'
    FEMALE = 'F'
    GENDER_CHOICES = (
        (MALE, '男'),
        (FEMALE, '女'),
    )
    name = models.CharField(max_length=50, blank=False, default='',verbose_name='姓名')
    gender = models.CharField(max_length=2,choices=GENDER_CHOICES,default=MALE,verbose_name='性别')
    created = models.DateTimeField(auto_now_add=True,verbose_name='创建时间')

    class Meta:
        ordering = ('name',)
        verbose_name = '观众'
        verbose_name_plural = verbose_name


    def __str__(self):
        return self.name

# 电影评分模型
class MovieScore(models.Model):
    viewer = models.ForeignKey(Viewer,related_name='观众',on_delete=models.CASCADE)
    game = models.ForeignKey(Movie,on_delete=models.CASCADE)
    score = models.IntegerField(verbose_name='评分')
    score_date = models.DateTimeField(verbose_name='评分时间')

    class Meta:
        ordering = ('-score',)
        verbose_name = '电影评分'
        verbose_name_plural = verbose_name

在这里面,我们定义了4个数据模型——电影分类,电影,观众和电影评分。下面,我们生成数据模型的迁移文件并执行数据迁移。

2.4 生成数据模型

在models.py文件中定义好数据模型之后,我们来生成这些数据模型。

首先通过manage.py工具的makemigrations命令生成数据模型的迁移:

python manage.py makemigrations userscore

生成了数据模型的迁移文件之后,继续使用migrate命令执行迁移:

python manage.py migrate

这样,我们的数据模型就创建完成。下面可以基于这几个数据模型创建视图函数了。

原文发布于微信公众号 - 州的先生(zmister2016)

原文发表时间:2018-07-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

州的先生

1 篇文章54 人订阅

相关文章

来自专栏晨星先生的自留地

大数据比赛的一个小心得

4495
来自专栏ATYUN订阅号

腾讯开源围棋AI程序PhoenixGo,复现AlphaGo Zero

PhoenixGo是一个围棋AI程序,它执行AlphaGo Zero论文“掌握无人知识的Go游戏”。它也被称为FoxGo中的“BensonDarr”,CGOS中...

2242
来自专栏java一日一条

多种负载均衡算法及其 Java 代码实现

负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展 网络设备和 服务器的带宽、增加 吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

2121
来自专栏美团技术团队

基于rsync的文件增量同步方案

背景 犀牛云盘是美团点评内部一个基于美团云的文件协作平台,核心是文件的结构化云存储以及上传和下载的体验优化。文件同步是云盘功能的重要部分(包括文件内容的同步和文...

7284
来自专栏安恒信息

APT预警:CVE-2017-11882的两种变式攻击

  近段时间APT预警平台(威胁分析平台)捕获了一些CVE-2017-11882的变化利用样本,这些变化利用能一定程度上绕过杀毒软件的检测。 这里列举两种变式...

4115
来自专栏机器之心

专栏 | 想免费用谷歌资源训练神经网络?Colab详细使用教程

61411
来自专栏Python中文社区

Github|Python开源项目漫游指南(一)

Scikit-learn Scikit-learn是基于Scipy为机器学习建造的的一个Python模块,他的特色就是多样化的分类,回归和聚类的算法包括支持向量...

2307
来自专栏Spark学习技巧

如何理解Linux中的load averages?

经常和 Linux 打交道的童鞋都知道,load averages 是衡量机器负载的关键指标,但是这个指标是怎样定义出来的呢?

892
来自专栏Spark学习技巧

几种简单的负载均衡算法

什么是负载均衡 负载均衡,英文名称为Load Balance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务...

5165
来自专栏何俊林

使用TensorFlow进行训练识别视频图像中物体

本教程针对Windows10实现谷歌公布的TensorFlow Object Detection API视频物体识别系统,其他平台也可借鉴。

5462

扫码关注云+社区

领取腾讯云代金券