Django-MacOSX工作流-关于高效开发方法的问题

Django-MacOSX工作流-关于高效开发方法的问题,django,macos,workflow,textmate,Django,Macos,Workflow,Textmate,我将概述我的工作流程,我想就如何提高工作效率提出一些建议。现在看起来有点麻烦和重复(这是我讨厌的),所以我正在寻找一些改进。请记住,我对django和它的工作原理还是新手,但我是一个相当流利的程序员(IMHO)。所以这里是 工具(我每天都使用这些工具,所以我不想移动): Mac OSX Leopard TextMate 带标签的终端 性能 假设 Django基础知识(做教程/买书) Python Fluent(运行2.6,支持空闲) 在models.py上启动我的第一个应用程序 出发

我将概述我的工作流程,我想就如何提高工作效率提出一些建议。现在看起来有点麻烦和重复(这是我讨厌的),所以我正在寻找一些改进。请记住,我对django和它的工作原理还是新手,但我是一个相当流利的程序员(IMHO)。所以这里是

工具(我每天都使用这些工具,所以我不想移动):
  • Mac OSX Leopard
  • TextMate
  • 带标签的终端
  • 性能
假设
  • Django基础知识(做教程/买书)
  • Python Fluent(运行2.6,支持空闲)
  • 在models.py上启动我的第一个应用程序
出发
  • 创建一个TextMate项目,其中包含整个django树

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

    python./manage.py runserver

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

    python./manage.py shell

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

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

  • 建立一个基本模型


  • 在第一个终端(正在运行的服务器)中,停止^C并启动syncdb服务器

  • 在“外壳端子”窗口中加载它

  • 是否中断是/否如果不起作用,则执行以下操作:
    • 停下来
    • 清除数据库
    • 重建数据库
    • 修正代码
    • 重新装弹
    • 重新加载模块
    • 祈祷
问题/评论/想法
  • 是我还是这看起来效率太低了
  • 看起来我应该能够重新加载(模块),但我不知道该怎么做。。有人吗
  • 似乎我应该能够从TextMate中测试这一点??有人吗
  • 即使只是为了摆脱困境,我也必须核实我是否想离开

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

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

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

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


第四,不要说“祈祷…”,试着说“看着测试通过”。

我发现更频繁地写会更流畅,而且只在某些东西失败并且原因不明时才使用shell,你想四处看看来找出原因。从一开始,它的效率要低一点,但很快就会成为一种很好的工作方式

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

好的,我会咬一口:-)以下是我的用法:

  • 。您将获得一个功能齐全的Apache+MySQL+PHP+phpMyAdmin堆栈来管理web和DB层。对于超越基本SQLite的应用程序来说,它非常棒。基本版是免费的,但我还是选择了专业版,因为我经常使用它,想支持开发者。测试并确保一切正常的一个好方法是从Django测试服务器开始,然后在自己的机器上在MAMP下部署和测试,最后将其推出到部署站点。(您可以尝试使用类似的工具自动化流程)

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

  • 。在开发AJAX前端和编辑Django模板时,它有助于提供一个像样的Javascript+HTML编辑器/调试器

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

  • 一个像样的MySQL或SQLite编辑器。phpMySQLAdmin是可以的,但是有时候有一个独立的工具是很好的。(以前是CocoaMySQL)并且都非常适合MySQL。一个优点是,一旦部署了应用程序,您就可以使用这些工具远程访问部署数据库服务器,并从桌面对其进行调整。在SQLite方面,和免费软件一样,都是很好的商业工具。至少你可以看看Django在引擎盖下干什么

  • 我使用Subversion进行版本控制,主要是因为它运行在一个独立的Mac Mini上,可以将所有内容保存到Drobo RAID阵列,并自动备份到其他几个外部驱动器。这是在时间机器之上的(是的,我有点偏执:-),我以前使用Eclipse的SVN支持,但现在我非常喜欢它。在某个时刻,当我能想出一个好的微笑
    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)
    
    >  python ./manage.py syncdb
    Creating table perforce_p4change
    Installing index for perforce.P4Change model
    
    > 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")
    
    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"))
    
    from django.test.simple import run_tests
    #
    # Unit tests from above
    #
    if __name__ == '__main__':
      run_tests(None, verbosity=1, interactive=False)