使用Django构建Python Restful Web服务开篇

Python编程应用实战,尽在掌握

从本篇开始,我们将使用Python和其最流行最全面的Web框架——Django来创建RestFul服务。

在本篇中,我们将安装使用Django创建RestFul服务所需的基本工具以搭建一个用于Django RestFul Web服务的开发环境。

在本书中,所有的环境都是基于:

  • Windows操作系统(其他操作系统平台的使用方法可能略有差异)
  • Python 3.5+(还在使用Python2的同学请自觉回避)
  • Django 2.0+

在本篇,我们将会涉及到以下内容:

  • virtualenv虚拟环境的创建和使用;
  • 在虚拟环境中安装Django和RestFul模块;
  • Django项目和应用的创建和配置;
  • 安装Postman客户端工具;

1.1 、创建并使用Python虚拟环境

1.1.1、为什么需要一个Python虚拟环境

有过Python编程经验的同学大概会有这样的体会:随着涉及的范围越来越多,或者开发的项目各有不同,我们安装的Python第三方模块也随之增多,一方面过多的第三方模块,不便于管理;另一方面,不同的项目之间所需求和依赖的第三方模块版本可能也有差异。这时候如果只在一个Python环境下进行项目开发,可能会出现这个项目能运行,另一个项目却报错的问题。

面对这种问题,一个解决方法是使用Python虚拟将不同的项目独立划分出来,每个项目都是最基础的Python环境,需要什么模块,需要什么版本的模块,都自行安装。

1.1.2、使用virtualenv创建一个Python虚拟环境

virtualenv是一个用于创建独立的Python环境的工具,用于解决Python开发中版本依赖和兼容的问题。

virtualenv的安装命令为:

pip install virtualenv

使用pip install virtualenv命令安装好virtualenv模块之后,我们就可以在命令行界面直接使用virtualenv命令了:

由上图可以发现,virtualenv有很多个选项,但是在这里我们使用默认的使用方法,在virtualenv后接上虚拟环境的名称就可以创建一个虚拟环境了,我们在目录下创建一个名为djangorestenv的虚拟环境:

virtual django_rest_env

默认情况下,virtualenv创建一个只包含了pip、wheel和setuptools这三个模块安装工具的全新Python环境。

在当前目录下,我们可以发现已经多出了一个新的文件夹——djangorestenv,点击进去可以查看我们创建的djangorestenv虚拟环境的结构,如下图所示:

对比我们本地安装成功的Python目录下的结构,可以发现,其可以说是麻雀虽小,五脏俱全:

在Scripts子目录下有很多可供我们使用的Python脚本,其中的activate脚本用来激活当前的虚拟环境,代码如下所示:

Scripts\activate

当看到命令行中目录前出现一个括号包含着虚拟环境的名称,说明我们已经激活了虚拟环境。

如果需要退出当前的虚拟环境,可以使用Script子目录下的deactivate脚本来实现虚拟环境的退出,代码如下所示:

Scripts\deactivate

1.2、安装Django和RestFul模块

在创建好Python虚拟环境之后,我们开始安装我们所需要的模块——Django和DjangoRestFrameWork。

Django用于在Python中提供Web服务,DjangoRestFrameWork则使得Django具备提供基于Restful 的Web服务。

在本书写作之时,Django 2.0已经全新发布,其带来了很多新的特性和功能,虽然Django 1.11版本会继续支持到2022年,但在此,我们仍然采用最新的Django 2.0版本。

在virtualenv环境中使用pip工具安装Django:

pip install django

在virtualenv环境中使用pip工具安装django-rest-framwork:

pip install djangorestframwork

安装完成之后,我们进入Python Shell中测试一下安装是否成功:

结果引入没有报错并且打印出了它们的版本号,说明我们的安装是成功的。

1.3 、规划项目和Rest Api

完成了上述步骤之后,我们可以正式使用Django和django-rest-framework来创建Restful服务了。

但是在此之前,我们先来规划一下我们的这个用于提供Restful服务的Django项目。

首先,我们创建的是一个用于记录电影和评分的项目,既然是使用的Restful来提供服务,那么我们根据Restful的规范,定义以下HTTP方法及其作用范围:

  • GET:用于获取电影列表;
  • GET:用于获取电影;
  • POST:用于在电影列表中创建电影;
  • PUT:用于修改电影;
  • DELETE:用于删除电影;

1.4、创建和配置Django项目

现在,我们可以开始这个基于Django开发的Restful 服务的开发了。首先来创建一个Django项目。

1.4.1、创建Django项目和应用

进入激活之前创建的vietualenv虚拟环境——djangorestenv,使用Django的命令——django-admin来创建一个项目,代码如下所示:

django-admin startproject moviesapi

然后,进入到moviesapi目录下,利用manage.py工具,创建一个应用,代码如下所示:

python .\manage.py startapp movies

1.4.2、添加所需应用到项目

在Django项目和应用都创建好之后,我们先来进行一些初步的配置,将刚刚安装的django-rest-framework模块和movies应用添加到moviesapi项目中。

打开moviesapi目录下的settings.py文件,在第33行左右的位置,有一个名为INSTALLED_APPS的列表变量,我们修改如下代码所示:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'movies',
    'django_filters'
]

1.4.3 修改项目时区

这个操作不是必须的,但是为了便于友好地显示,我们将项目默认语言改为中文,在settings.py文件中,修改变量LANGUAGE_CODE的值为cn-hans,代码如下所示:

LANGUAGE_CODE = 'zh-hans'

为了便于时间的计算和显示,我们将项目默认的时区从UTC时区修改为中国的时区,代码如下所示:

TIME_ZONE = 'Asia/Shanghai'

1.5、安装Postman测试工具

在此,我们推荐安装一个工具——Postman,用于测试Restful服务。Restful服务中使用到了HTTP协议中的多种方法,而常规的浏览器只是提供GET方法的显示请求,对于其他方法来说,就不是很好进行测试。虽然可以使用命令行工具来测试,但是操作起来并不顺手。所以在此推荐使用这个界面友好的工具——Postman。

打开Postman的官网(https://www.getpostman.com/),点击下载按钮:

跳转到下载页面后,根据自己的操作系统选择合适的版本:

最后执行安装包即可。

安装完成后,打开软件,其界面如下图所示:

可以发现,我们可以显式地调用各种HTTP协议方法。对于Postman更多的用法,我们会在接下来的章节中介绍到。

1.2、本章小结

本章从Python虚拟环境virtualenv的创建开始,介绍了一整个基于Django开发Restful服务的Web环境的搭建,最后还介绍安装了一个非常有用的restful接口测试工具——Postman。在完成了本章的基础上,我们就可以进行项目的Restful服务的开发和构建了。

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2506
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2517
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3035
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4798
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4507
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

1990
来自专栏魂祭心

原 canvas绘制clock

4004
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2898
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

3955

扫码关注云+社区