使用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 条评论
登录 后参与评论

相关文章

来自专栏信安之路

CVE2018-1111 漏洞复现

近日,红帽官方发布了安全更新,修复了编号为 CVE-2018-1111 的远程代码执行漏洞,攻击者可以通过伪造 DHCP 服务器发送响应包,攻击红帽系统,获取 ...

1270
来自专栏大魏分享(微信公众号:david-share)

应用服务器到底是个啥?| 从开发角度看应用架构2:对Java EE应用进行打包和部署!

2522
来自专栏专注 Java 基础分享

Maven 整合 SSH 框架

     前面的一系列文章中,我们总结了三大框架:Struts2,Hibernate,Spring 的基本知识。本篇就姑且尝试着使用 Maven 这个项目构建工...

27210
来自专栏吴伟祥

logging总结 - log4j2使用流程[归档存储]

<web-app> 2.5 以前要多个依赖 log4j-web,还需要在web.xml配置listener、filter

2122
来自专栏云计算教程系列

你的nginx访问过慢?增加个模块吧!

ngx_pagespeed 是nginx web服务器的一个模块,通过安装它你的网站加载速度将会“嗖”的一下上升。

7653
来自专栏YG小书屋

python 超时任务kill

3292
来自专栏小狼的世界

Resin介绍及其使用配置

Resin是一个提供高性能的,支持 Java/PHP 的应用服务器。目前有两个版本:一个是GPL下的开源版本,提供给一些爱好者、开发人员和低流量网站使用;一种是...

1153
来自专栏乐沙弥的世界

Linux 7下安装Python 3.6

版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处。

1131
来自专栏自动化测试实战

Flask第二篇——服务器相关

2988
来自专栏cloudskyme

WSO2 ESB(1)

什么是WSO2 ESB? WSO2 ESB是一个轻量级的易于使用的企业服务资源总线。WSO2 ESB允许系统管理员和SOA架构师,消息路由,虚拟化,中介,转换,...

3484

扫码关注云+社区