5

我将概述我的工作流程,我想就如何提高工作效率提出一些建议。现在看起来有点麻烦和重复(我讨厌的东西),所以我正在寻找一些改进。请记住,我对 django 以及它的工作原理仍然很陌生,但我是一个非常流利的编码器(恕我直言)。所以这里...

工具(我每天都使用这些,所以我不倾向于改变)

  • Mac OSX 豹
  • 文本伴侣
  • 带标签的终端
  • 强制

假设

  • Django 基础知识(教程/买了书)
  • Python Fluent(运行 2.6 并支持 IDLE)
  • 开始我的第一个应用程序在 models.py 上工作

开始

  • 创建一个包含整个 django 树的 TextMate 项目。

TextMate 项目 http://img.skitch.com/20090821-g48cpt38pyfwk4u95mf4gk1m7d.jpg

  • 在终端的第一个选项卡中启动服务器

    python ./manage.py runserver

  • 在终端窗口的第二个选项卡中启动 shell

    python ./manage.py shell

  • 这产生了 iPython,让我开始开发工作流程

工作流程

  • 创建并构建一个名为 models.py 的基本模型

  • 建立一个基本模型


class P4Change(models.Model):
  """This simply expands out 'p4 describe' """
  change        = models.IntegerField(primary_key=True)
  client        = models.ForeignKey(P4Client)
  user          = models.ForeignKey(P4User)
  files         = models.ManyToManyField(P4Document)
  desc          = models.TextField()
  status        = models.CharField(max_length=128)
  time          = models.DateField(auto_now_add=True)


  def __unicode__(self):
    return str(self.change)

admin.site.register(P4Change)
  • 在第一个终端(正在运行的服务器)中停止它 ^C 和 syncdb 启动服务器

>  python ./manage.py syncdb
Creating table perforce_p4change
Installing index for perforce.P4Change model
  • 在 shell 终端窗口中加载它..

> python ./manage.py shell
Python 2.6.2 (r262:71600, Apr 23 2009, 14:22:01) 
Type "copyright", "credits" or "license" for more information.

IPython 0.10 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.

In [1]: from perforce.models import *

In [2]: c = P4Client.objects.get_or_create("nellie")
  • 如果它不起作用,它是否打破了是/否,然后执行以下操作:
    • 停止外壳
    • 清空数据库
    • 重建数据库
    • 修复代码
    • 重新加载外壳
    • 重新加载模块
    • 祈祷...

问题/评论/想法

  • 是我还是这看起来非常低效?
  • 似乎我应该能够重新加载(模块),但我不知道该怎么做..有人吗?
  • 似乎我应该能够在 TextMate 中对此进行测试?任何人??
  • 即使只是离开外壳,我也必须确认我想离开..

这样做的目的是让你们所有的天才向我展示一种更高效的工作方式。我完全愿意接受合理的建议。我不倾向于改变工具,但我愿意接受批评。

4

4 回答 4

4

./manage.py runserver首先,在您的模型到位之前,无需执行任何操作。

二、清除数据库/重建数据库应该在修复代码之后进行,并且可以一举搞定./manage.py reset perforce

第三,您每次在 shell 中输入的内容(导入模型、尝试创建对象)都应该写在测试套件中。然后你可以做./manage.py test perforce而不是启动shell并再次输入它。实际上,如果您使用的是测试套件,则不需要这样做,因为它每次都会创建一个干净的虚拟数据库,并在完成后为您分解。

第四,不要“祈祷...”,而是尝试“观察测试通过”。

于 2009-08-21T19:22:26.710 回答
3

我发现更频繁地编写单元测试更顺畅,并且仅在出现故障时才使用外壳,而且原因并不明显,您想四处寻找以找出答案。一开始它效率有点低,但很快就变成了一种很好的工作方式。

在我处理视图并需要运行服务器之前,我也倾向于专注于使模型或多或少稳定和完整(至少在影响表结构的方面)。这往往会尽可能多地预先加载重置,因此您可以在便宜的时候进行重置。

于 2009-08-21T20:38:53.230 回答
3

感谢所有阅读本文并正在寻找更好方法的人。我认为单元测试绝对是更简单的方法。

因此,根据文档,您只需创建一个与 models.py 平行的文件 tests.py 并将测试放在那里。

from django.test import TestCase
from perforce.models import P4User, P4Client

class ModelTests(TestCase):
  def setUp(self):
    self.p4 = P4.P4()
    self.p4.connect()

  def test_BasicP4(self):
    """
    Make sure we are running 2009.1 == 65
    """
    self.failUnlessEqual(self.p4.api_level, 65)

  def test_P4User_get_or_retrieve(self):
    """
    This will simply verify we can get a user and push it into the model
    """
    user = self.p4.run(("users"))[0]
    dbuser = P4User.objects.get_or_retrieve(user.get('User'))

    # Did it get loaded into the db?
    self.assertEqual(dbuser[1], True)

    # Do it again but hey it already exists..
    dbuser = P4User.objects.get_or_retrieve(user.get('User'))
    # Did it get loaded into the db?
    self.assertEqual(dbuser[1], False)

    # Verify one field of the data matches
    dbuser = dbuser[0]
    self.assertEqual(dbuser.email, user.get("Email"))

现在您可以简单地启动终端并执行 python manage.py test 并且将运行测试但同样这是一个非常有限的视图并且仍然需要您换入/换出程序。所以这就是您如何直接从Textmate 使用 ⌘R。

在顶部添加一个导入行,在底部添加几行。

from django.test.simple import run_tests
#
# Unit tests from above
#
if __name__ == '__main__':
  run_tests(None, verbosity=1, interactive=False)

And now ⌘R will work directly from TextMate.

于 2009-08-21T22:16:39.913 回答
2

好的,我会咬 :-) 这就是我使用的:

  • 甲基苯丙胺。您将获得一个功能齐全的 Apache + MySQL + PHP + phpMyAdmin 堆栈来管理 Web 和 DB 层。它非常适合超越基本 SQLite 的应用程序。基本版是免费的,但我继续使用 Pro,因为我经常使用它并希望支持开发人员。测试并确保一切正常的一个好方法是从 Django 测试服务器开始,然后在您自己的机器上在 MAMP 下部署和测试,最后将其推送到您的部署站点。(您可以尝试使用类似Fabric的方法来自动化该过程)。

  • Eclipse + PyDev + PyDev 扩展。正确配置后,您将获得 Python 代码完成、良好的开发环境和完整的调试。您可以对其进行配置,以便它为您运行 Django 测试服务器,并且您可以在 Django 源代码或您自己的代码中的任何行设置断点。我喜欢 Eclipse 的一点是,一旦您习惯了该环境,您也可以使用它进行 C/C++、Java、JavaScript、Python 和 Flex 编码。

  • Eclipse 的 Aptana。它有助于开发 AJAX 前端和编辑 Django 模板以获得体面的 Javascript + HTML 编辑器/调试器。

  • 文本伴侣。我创建了一个包含所有 Django 源的 TextMate 项目,并将其保存在 Django 源目录中。这样,我可以通过Django源码快速进行项目搜索,并单击打开源文件。您还可以设置它,以便您可以在 Eclipse 和 TextMate 编辑器之间来回切换并让它们自动重新加载。

  • 一个不错的 MySQL 或 SQLite 编辑器。phpMySQLAdmin 是可以的,但有时拥有一个独立的工具会很好。SequelPro(以前的 CocoaMySQL)和Navicat都非常适合 MySQL。一个优点是,一旦您的应用程序被部署,您就可以使用这些工具远程访问部署数据库服务器并从您的桌面对其进行调整。在 SQLite 方面, SQLiteManagerBase是很好的商业工具,免费的FireFox SQLite Manager也是如此。至少你可以看到 Django 在幕后做了什么。

  • 我使用 Subversion 进行版本控制主要是因为它在独立的 Mac Mini 上运行,它保存到 Drobo RAID 阵列,并自动将所有内容备份到其他几个外部驱动器。这是在 Time Machine 之上的(是的,我很偏执:-) 我曾经使用 Eclipse 的 SVN 支持,但现在我是Versions的忠实粉丝。在某个时候,当我能找到一个好的镜像方案时,我会切换到 Mercurial、Git 或 Bazaar,但现在这很好用。

  • 终端加上一堆 shell 脚本。每个人都有自己的版本。当涉及到这些事情时,我很懒惰,所以我设置了一堆 bash 快捷方式来帮助加快重复的 Django 管理任务。我前一段时间把这些贴出来了。

其中大部分可以免费或适度收费(< 100 美元)。但是,如果我必须选择在 Mac 上进行 Django 开发的“必备”项目,那就是 Eclipse 和 PyDev。

我敢肯定有一些我错过了。很高兴听到其他人都在使用什么工具。

于 2009-08-21T22:07:43.147 回答