全面剖析Python的Django框架中的项目部署技巧

 更新时间:2015年04月16日 16:10:29   投稿:goldensun  
这篇文章主要全面剖析了Python的Django框架的部署技巧,包括Fabric等自动化部署和建立单元测试等方面,强烈推荐!需要的朋友可以参考下

from fabric.api import lcd, localdef deploy():
  with lcd('/path/to/my/prod/area/'):
 
    # With git...
    local('git pull /my/path/to/dev/area/')
 
    # With Mercurial...
    local('hg pull /my/path/to/dev/area/')
    local('hg update')
 
    # With both
    local('python manage.py migrate myapp')
    local('python manage.py test myapp')
    local('/my/command/to/restart/webserver')

这将会从开发主分支拉回(pull)变更,运行你实施的任何迁移,运行测试,并且重启你的web服务器。这些只需在命令行中的一条简单的命令。如果其中的一条命令失败了,脚本将会停止运行并报告发生的事情。一旦你修复了这个问题,无需再手工运行其余步骤。因为它们是幂等的,你只需重新运行部署命令,一切都将恢复正常。

(译注:idempotent 幂等,某一元运算为幂等的时,其作用在任一元素两次后会和其作用一次的结果相同。)

注意上面的代码是假设你部署在相同的机器上。如果不是这样的话,这个文件很可能相同,但是会使用Fabric的run函数来替代local。参见Fabric 文档 获取更多细节。

现在我们创建了fabfile.py,该怎样实际部署呢?很简单。只需运行:
 

$ fab prepare_deployment$ fab deploy

在技术层面,这些可以合并为一个单独的命令,但是我觉得最好明确的准备你的部署工作再部署它,因为这样就使你更关注于你正在做的事情。

建立单元测试

如果你但凡听说过我,可能就会知道我对自动测试非常着迷。无论如何,有太多的Django项目没有写任何测试。这是需要预先花费一点时间去做的事情,但是却给未来带来巨大的红利。如果你曾经使用print语句调试过你的应用,在恰当的地方用合适的测试,这样就将给你节省许多时间。

对于Django,Python的单元测试模块完全够用了。下面是一个app的一个最小的测试例子:
 

import datetimefrom django.test import TestCasefrom myapp.models import Postclass BlogPostTestCase(TestCase):
  def setUp(self):
    Post.objects.create(id=1, 
      title='Starting a Django 1.6 Project the Right Way', 
      date=datetime.datetime.now(),
      category='Django')
    Post.objects.create(id=2, 
      title='Python\'s Hardest Problem', 
      date=datetime.datetime.now(),
      category='Python')
 
  def test_posts_have_category(self):
    """Animals that can speak are correctly identified"""
    first_post = Post.objects.get(id=1)
    second_post = Post.objects.get(id=2)
    self.assertEqual(first_post.category, 'Django')
    self.assertEqual(second_post.category, 'Python')

你可以将这些代码写到名为test_<appname>.py的文件中,并将其放到app测试时所在的目录。为了为app运行这些测试,只需运行./manage.py test <appname>。我们创建的fabfile文件已经知道在部署前运行这些测试,所以不需要再做任何别的修改了。
享受你的新的Django应用程序

就是这些!你已经开始了实际的开发。现在真正的乐趣才会开始。只需记住:经常提交,测试一切,还有不要在你提供服务的地方书写代码。无论从现在起会发生什么,你肯定已经以正确的方式开始了一个Django1.6 项目!

 

相关文章

  • python中copy()与deepcopy()的区别小结

    python中copy()与deepcopy()的区别小结

    接触python有一段时间了,一直没有系统的学习过,也对copy,deepcoy傻傻的分不清,故抽出时间来理一下。 下面这篇文章主要给大家介绍了关于python中copy()与deepcopy()的区别的相关资料,需要的朋友可以参考下
    2018-08-08
  • python中h5py开源库的使用样例详解

    python中h5py开源库的使用样例详解

    这篇文章主要介绍了python中的h5py开源库的使用,本文只是简单的对h5py库的基本创建文件,数据集和读取数据的方式进行介绍,需要的朋友可以参考下
    2022-05-05
  • Python生成扫雷地图的方法

    Python生成扫雷地图的方法

    这篇文章主要为大家详细介绍了Python生成扫雷地图的方法,并非游戏实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Python实现K-means聚类算法并可视化生成动图步骤详解

    Python实现K-means聚类算法并可视化生成动图步骤详解

    这篇文章主要介绍了Python实现K-means聚类算法并可视化生成动图,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • python解决字典中的值是列表问题的方法

    python解决字典中的值是列表问题的方法

    这篇文章主要介绍了字典中的值是列表问题,先用value连成一个str,最后用str.split()作一个转换,生成一个列表.看了python cookbook,上面正好有一个recipe讲到如何处理这样的问题
    2013-03-03
  • python实现12306抢票及自动邮件发送提醒付款功能

    python实现12306抢票及自动邮件发送提醒付款功能

    本文给大家分享python实现12306抢票及自动邮件发送提醒付款功能,文章没有给大家贴出完整代码,只是技术交流,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-03-03
  • Python中的xlrd模块使用原理解析

    Python中的xlrd模块使用原理解析

    这篇文章主要介绍了Python中的xlrd模块原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • jupyter notebook 多行输出实例

    jupyter notebook 多行输出实例

    这篇文章主要介绍了jupyter notebook 多行输出实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python使用wxPython和PyMuPDF提取PDF页面指定页数的内容

    Python使用wxPython和PyMuPDF提取PDF页面指定页数的内容

    在本篇博客中,我们将探讨如何使用wxPython和PyMuPDF库创建一个简单的Bokeh应用程序,用于选择PDF文件并提取指定页面的内容,并将提取的内容显示在文本框中,需要的朋友可以参考下
    2023-08-08
  • Python如何使用ConfigParser读取配置文件

    Python如何使用ConfigParser读取配置文件

    这篇文章主要介绍了Python如何使用ConfigParser读取配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11

最新评论