我将概述我的工作流程,我想就如何提高效率提出一些建议。现在看起来有点麻烦和重复(我讨厌的东西),所以我正在寻找一些改进。请记住,我仍然是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)
> 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")
对于你们所有的天才来说,重点在于向我展示一种更有效的工作方式。我完全乐于接受合理的建议。我并不倾向于转移工具,但我愿意接受批评。
答案 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端SQLiteManager和Base是很好的商业工具,免费赠品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。
我确信有一些我错过了。很高兴听到其他人正在使用的工具。