Django - Mac OSX工作流程 - 有关高效开发方法的问题

时间:2009-08-21 19:11:23

标签: django macos workflow textmate

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

工具(我每天都使用这些,所以我不想转移)

  • Mac OSX Leopard
  • TextMate的
  • 终端w /标签
  • Perforce的

假设

  • Django Basics(教程/买书)
  • Python Fluent(使用IDLE支持运行2.6)
  • 开始我的第一个应用程序工作在models.py

开始

  • 创建一个TextMate项目,其中包含整个django树。

TextMate Project 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")
  • 如果它不起作用,它是否打破是/否则执行此操作:
    • 停止shell
    • 清除数据库
    • 重建数据库
    • 修复代码
    • 重新加载shell
    • 重新加载模块
    • PRAY ...

问题/意见/想法

  • 是我还是这看起来非常低效?
  • 好像我应该能够重装(模块),但我无法弄清楚如何做到这一点......任何人?
  • 好像我应该能够在TextMate中测试这个?任何人??
  • 即使刚离开外壳,我也必须验证我要离开..

对于你们所有的天才来说,重点在于向我展示一种更有效的工作方式。我完全乐于接受合理的建议。我并不倾向于转移工具,但我愿意接受批评。

4 个答案:

答案 0 :(得分:4)

首先,在模型到位之前无需执行./manage.py runserver

第二,清除数据库/重建数据库应该在修复代码后完成,并且可以一举完成./manage.py reset perforce

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

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

答案 1 :(得分:3)

我发现更频繁地编写unit tests并且只在出现故障时才使用shell,并且不明显为什么并且你想要四处寻找它。 在一开始就效率低一点,但很快就会变成一种很棒的工作方式。

在处理视图并需要运行服务器之前,我还倾向于集中精力使模型或多或少地稳定和完整(至少会影响表结构)。这往往会导致尽可能多的重置,所以当它便宜的时候你就会这样做。

答案 2 :(得分: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测试,这将运行测试,但这又是一个非常有限的视图,仍然需要你交换进程序。所以这是你怎么做这直接来自Textmate使用⌘R。

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

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

现在⌘R将直接从TextMate工作。

答案 3 :(得分:2)

好的,我会咬人:-)这就是我用的东西:

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

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

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

  • TextMate。我创建了一个包含所有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管理任务。我posted these up一会儿。

其中大部分可以免费或中等费用(<100美元)。但是,如果我必须在Mac上为Django开发选择'必须'项目,那将是Eclipse和PyDev。

我确信有一些我错过了。很高兴听到其他人正在使用的工具。