如何为未来的变化准备一个django项目

时间:2009-10-19 13:04:09

标签: python database django

当我在我的第一个django支持的网站上工作时,我不断学习新的东西,并在我去的时候对我的应用程序进行各种更改和添加。我尝试遵循DRY和pythonic原则,并且在编码时要聪明,但最终我必须把网站带到现场,并且确定在我做完之后不久,新的和退出的东西将会出现在管道上,我将要实现它。

为未来做准备:

考虑到这一点,人们对我如何准备我的代码现在以便为这些当前不可预测/未知的升级做出 future-ready 提出任何建议/添加到我的代码库?

后见之明是20/20:

您希望您在开始时做了什么,这会让您的网站正常运行,从而使您的生活更轻松?

我学到的小事(例子):

  • 使用UTC作为默认时区(并使用datetime.datetime.utcnow()
  • 使用South来帮助未来的数据库更改(尚未完成,但看起来很明智)
  • 我的模板中没有硬代码链接(使用get_absolute_url()和反向查找)
  • 创建一个单独的tools应用,以包含我可能希望在将来的项目中使用的小型可重用模板标签和实用程序功能(以后不需要将它们分离)。

这些是小技巧,有些直接来自django-docs,但我认为它们有所帮助。

你呢?对于为未来做好准备的新应用或项目,您的最佳做法是什么?

5 个答案:

答案 0 :(得分:8)

  • 使用virtualenv部署到纯环境中。
  • 使用pip要求文件记录要求。

我确信其他人会建议他们的部署策略,但做出这些改变对我来说是非常积极的。

答案 1 :(得分:7)

一开始就学习并使用South,因此当您进行主要的数据库架构更改时,您将拥有一个迁移工具。否则,您会发现最终并排运行两个版本,同时试图找出如何移植数据,并且它变得非常混乱。

http://south.aeracode.org/

答案 2 :(得分:5)

不确定这与Webfaction的精彩世界之间有多相关。

使用Django从Django的svn存储库中检出,而不是在创建Django应用程序时为您安装的主机,因此您可以通过运行svn up来更新Django以获得安全修复。

我几天前必须这样做,虽然它不是太痛苦(删除Django安装,然后运行SVN结账,然后重新启动Apache),为我所有的各种项目做这件事有点恼火 - 跑svn up会更快乐。

答案 3 :(得分:4)

听James Bennett:阅读实用的Django项目,关注http://b-list.org/。在youtube上搜索关于可重用应用程序的djangocon谈话。阅读他的代码(在bitbucket上)。

我从他那里得到的建议示例:依赖注入您的视图将使您的应用程序更加可重用。一个具体的例子 - 重构这种特定情况的观点:

def user_login_view(request):
    context = {
        'login_form': forms.LoginForm
    }
    return render_to_response('accounts/login.html', context)

使用这个通用视图:

def user_login_view(request, form=models.LoginForm, template_name='accounts/login.html'):
    context = {
        'login_form': form,
    }
    return render_to_response(template_name, context)

更好的是,为您的视图提供一个通用名称,例如“form_view”,重命名您的表单'form'而不是'login_form',并传递您的参数明确性。但这些变化会改变功能,因此不是纯粹的重构。一旦你重构了,那么你可以开始逐步改变其他东西。

答案 4 :(得分:-2)

“会出现一些问题,我希望我之前已经实施了”

这是一个好网站的定义。一个进化和变化的人。

“尽可能准备未来?”

这可能意味着什么?你担心什么具体的事情?技术总是在变化。一个好的网站总是在不断发展。你想要阻止什么?你想阻止技术变革吗?您想阻止您的网站发展吗?

总会有变化。它对你以前的技术选择将永远是毁灭性的。

除非拒绝参与新技术,否则无法阻止,停止甚至减少变更的影响。