围绕Django构建web应用

作者: 大蟒传奇 | 来源:发表于2016-09-18 13:26 被阅读566次

<big><strong>Django</strong></big>

被解放的django

不对,图放错了,应该是这个

Django

是一套开源的web框架。它采用python语言,性能稳定,非常流行。开发者使用它可以很轻松上手搭建一个网站。
由于它在生产中的优异表现,有很多公司使用Django构建自己的业务。
学习Django可以帮助程序员发现更多的机会(大雾)。
本篇博客将简单介绍如何围绕Django构建一个web应用。需要说明的是,这里都是泛泛而谈,几乎没有代码,不会有很多操作细节。如果想要更深入地了解Django,请移步Django官网

web应用

常见的web应用架构如下图所示


web应用常见架构

web 服务器

流行的web服务器像nginx,apache,lighttpd,IIS等等,一般都有着Django自带的开发服务器不具有的一些功能:

  1. 高效率处理静态文件,web server一般用c语言开发,调用是native的函数,对IO,文件传输都有针对性的优化
  2. 充当一个简易的网络防火墙,可以denny一些ip,简单的控制并发连接数量等等。
  3. 处理高并发短连接请求,把成千上万用户的request通过内网的几十个长连接进行转发。一方面是web server擅长处理高并发,另一方面,包括Django在内的大部分框架都不具备处理高并发的能力。

这其中nginx当下最引人瞩目,相比其它web server,它具有很多优点,下面列举几个

  1. 性能非常卓越,非常稳定
  2. 安装简单,依赖包少
  3. conf文件非常容易配置

了解性能优势,可以查看webserver性能对比
下图是并发性能测试。

并发性能测试

存储

数据的存储是门大学问,作者也不是相关专家,因此这里只列举一些网上的资料。
需要说明的是,流行的数据库,Django 一般都有现成的backends,对于暂时不支持的适用Django也会有一些workround,详情见databases

流行的数据库

Oracle
MySQL
PostgreSQL
MongoDB
Microsoft SQL Server

流行的数据库排名

cache

当下流行的有redismemcache
关于两者性能的对比,网上的资料也比较多,比如这个

应用

开发

Django采用了类似MVC的模式,叫做MVT(Model–Template–View),如下图所示。

MVT模式

测试

Django推荐使用unittest
模块进行测试,具体说明见相关文档
调用方式非常简单

python manage.py test [model_to_test]

利用这个方式可以很方便的进行集成测试

部署

Django 支持多种部署方式,流行的有下面几种

  1. How to use Django with Gunicorn
  2. How to use Django with uWSGI

详细文档在这里

好用的工具

IDE

pycharm,对Django的支持很好。
你能想到或是没想到的功能,基本上这个IDE都集成了,写python战斗力加成20%,谁用谁知道。

git

作为当前优秀的版本控制工具,还不会使用git的程序员已经跟不上时代啦。

fabric

Fabric 是一个 Python (2.5-2.7) 库和命令行工具,用来流水线化执行 SSH 以部署应用或系统管理任务。它是:

  • 一个让你通过 命令行 执行 任意 Python 函数 的工具;
  • 一个让通过 SSH 执行 Shell 命令更加 容易pythonic 的子程序库(建立于一个更低层次的库)。

比如要部署一个最新版本的Django应用,可能会执行下面的步骤(非完全)

  1. 更新最新代码
  2. 执行测试
  3. 部署应用

每次都要执行命令行很麻烦,写shell脚本又不好维护,这个时候fabric就能帮到你,只需要执行一条命令就能优雅地完成上面的所有工作。
详情请见官网

supervisor

为保证线上服务的稳定运行,需要一个工具无时无刻“照顾”线上业务的运行,让它开启自起,自动重启,或者更多的功能,这个时候supervisord就是最好的选择之一。
它是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。
这是一个很好的实践

celery

业务可能需要定时向用户推送一些信息,或者跑一些定时任务。大多数人可能马上想到使用crontab。
现在可以使用更强大的工具:celery
Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具。
它是一个专注于实时处理的任务队列,同时也支持任务调度。

它是支持Django的,见这里

sentry

说到跟踪错误信息,不得不提sentry
对Django也有很好的支持 raven

相关文章

网友评论

    本文标题:围绕Django构建web应用

    本文链接:https://www.haomeiwen.com/subject/hsowettx.html