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

daupos2t  于 2022-12-14  发布在  Go
关注(0)|答案(4)|浏览(126)

我将概述我的工作流程,并希望得到一些关于如何提高效率的建议。它现在看起来有点繁琐和重复(我讨厌的东西),所以我正在寻找一些改进。请记住,我仍然是一个新的django和它是如何工作的,但我是一个相当流利的编码(恕我直言)。所以这里去...

工具 (我每天都用,所以我不想换)

  • Mac OSX豹
  • 文本伴侣
  • 带凸片的端子
  • 必须

假设

  • Django基础(做了教程/买了书)
  • Python流利(运行2.6,支持IDLE)
  • 在www.example.com上启动第一个应用程序models.py

开始

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

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

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

python ./manage.py runserver

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

python ./manage.py shell

  • 这将生成iPython,让我们开始开发工作流

工作流程

  • 创建并构建名为www.example.com的基本模型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)
  • 在第一个终端(Running server)中,将其停止^C并同步数据库启动server
>  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内部测试这个??任何人??
  • 即使只是走出壳,我也必须确认我想离开。

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

kd3sttzy

kd3sttzy1#

首先,在模型就位之前,不需要执行./manage.py runserver
第二,清除数据库/重建数据库应该在修复代码之后完成,并且可以使用./manage.py reset perforce一次性完成
第三,你每次在shell中输入的东西(导入模型,尝试创建一个对象)应该用一个测试套件来编写。然后你可以执行./manage.py test perforce,而不是启动shell并再次输入它。实际上,如果你使用测试套件,你不需要这样做,因为它每次都会创建一个干净的虚拟数据库,并在完成后为你分解它。
第四,不要“祈祷......",试试“看着测试通过”。

xqnpmsa8

xqnpmsa82#

我发现更频繁地编写unit tests更流畅,只有当某个东西失败了,原因不明显,你想四处看看找出原因时才使用shell。它**在一开始有点低效,但很快就变成了一种很好的工作方式。
在我处理视图和运行服务器之前,我也倾向于集中精力让模型变得更稳定和完整(至少在会影响表结构的方面),这倾向于尽可能多地进行重置,这样你就可以在便宜的时候进行重置。

8ehkhllq

8ehkhllq3#

感谢每一个读到这篇文章并正在寻找更好方法的人。我认为单元测试绝对是更简单的方法。
因此,根据文档,您只需创建一个与www.example.com并行tests.pymodels.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中工作。

ia2d9nvy

ia2d9nvy4#

好吧,我会咬:-)以下是我用途:

  • 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来说都相当不错,一个优点是一旦你的应用程序部署好了,您可以使用这些工具远程访问部署DB服务器并从桌面对其进行调整。在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。
我肯定有一些我错过了。听到其他人在使用什么工具是很棒的。

相关问题