I am going to outline my workflow and I would like some suggestions on how to improve the efficiency of this. It seems right now a bit cumbersome and repetitive (something I hate), so I am looking for some improvements. Keep in mind I’m still new to django and how it works but I’m a pretty fluent coder (IMHO). So here goes…
Tools (I use these everyday so I’m not inclined to shift):
- Mac OSX Leopard
- TextMate
- Terminal w/tabs
- Perforce
Assumptions
- Django Basics (Did the tutorials/bought the books)
- Python Fluent (running 2.6 with IDLE Support)
- Starting my first Application working on models.py
Starting out
- Create a TextMate Project with the entire django Tree inside of it.
TextMate Project http://img.skitch.com/20090821-g48cpt38pyfwk4u95mf4gk1m7d.jpg
-
In the first tab of the terminal start the server
python ./manage.py runserver -
In the second tab of the terminal window start the shell
python ./manage.py shell -
This spawns up iPython and let’s me start the development workflow
Workflow
-
Create and build a basic Model called models.py
-
Build a basic Model
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)
- In the first terminal (Running server) stop it ^C and syncdb start server
> python ./manage.py syncdb
Creating table perforce_p4change
Installing index for perforce.P4Change model
- In the shell terminal window load it..
> 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")
- Did it break yes/no if it did not work then do this:
- Stop the shell
- Clear the database
- Rebuild the database
- Fix the code
- Reload the shell
- Reload the modules
- PRAY…
Issues / Comments / Thoughts
- Is it me or does this seem terribly inefficient?
- It seems like I should be able to do a reload(module) but I can’t figure out how to do this.. Anyone?
- It would seem as though I should be able to test this from within TextMate?? Anyone??
- Even to just get out of the shell I have to verify I want to leave..
The point of this is for all of you geniuses out there to show me the light on a more productive way to work. I am completely open to reasonable suggestions. I’m not inclined to shift tools but I am open to criticisms.
Thanks to everyone who read this and is looking for a better way. I think unit tests are definately the simpler approach.
So according to the docs you simply need to create a file tests.py parallel to models.py and put tests in there.
Now you can simply fire up the terminal and do python manage.py test and that will run the tests but again that’s a pretty limited view and still requires you to swap in/out of programs.. So here is how you do this directly from Textmate using ⌘R.
Add an import line at the top and a few line at the bottom.
And now ⌘R will work directly from TextMate.