Django - рабочий процесс Mac OSX - вопросы по эффективным методологиям разработки - PullRequest
5 голосов
/ 21 августа 2009

Я собираюсь обрисовать в общих чертах мой рабочий процесс, и я хотел бы несколько предложений относительно того, как улучшить эффективность этого. Сейчас это кажется немного громоздким и повторяющимся (что-то, что я ненавижу), поэтому я ищу некоторые улучшения. Имейте в виду, что я все еще новичок в django и как он работает, но я довольно беглый программист (ИМХО). Так что вот так ...

Инструменты (я использую их каждый день, поэтому не склонен сдвигаться) :

  • Mac OSX Leopard
  • TextMate
  • Терминал с вкладками
  • неволей

Предположения

  • Основы Django (Сделал учебники / купил книги)
  • Python Fluent (работает 2.6 с поддержкой IDLE)
  • Запуск моего первого приложения, работающего на models.py

Начиная с

  • Создайте проект TextMate со всем деревом django внутри него.

Проект TextMate http://img.skitch.com/20090821-g48cpt38pyfwk4u95mf4gk1m7d.jpg

  • На первой вкладке терминала запускается сервер

    python ./manage.py runserver

  • Во второй вкладке окна терминала запускается оболочка

    python ./manage.py shell

  • Это порождает iPython и позволяет мне начать процесс разработки

Workflow

  • Создание и построение базовой модели с именем 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 server

>  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")
  • Это сломало да / нет, если это не сработало, тогда сделайте это:
    • Остановите снаряд
    • Очистить базу данных
    • Перестроить базу данных
    • Исправить код
    • Перезагрузить оболочку
    • Перезагрузка модулей
    • МОЛИТВА ...

Проблемы / Комментарии / Мысли

  • Это я или это кажется ужасно неэффективным?
  • Кажется, что я должен быть в состоянии сделать перезагрузку (модуль), но я не могу понять, как это сделать .. Кто-нибудь?
  • Казалось бы, я должен быть в состоянии проверить это из TextMate ?? Любой ??
  • Даже для того, чтобы просто выйти из скорлупы, я должен убедиться, что хочу уйти ..

Смысл этого в том, что все вы, гении, должны показать мне более продуктивный способ работы. Я полностью открыт для разумных предложений. Я не склонен менять инструменты, но я открыт для критики.

Ответы [ 4 ]

4 голосов
/ 21 августа 2009

Прежде всего, не нужно делать ./manage.py runserver, пока ваши модели не будут на месте.

Во-вторых, очистить базу данных / перестроить базу данных следует после исправления кода, и это можно сделать одним махом с ./manage.py reset perforce

В-третьих, вещи, которые вы вводите в оболочку каждый раз (импорт моделей, попробуйте создать объект), должны записываться вместо этого в наборе тестов. Тогда вы можете сделать ./manage.py test perforce вместо того, чтобы запустить оболочку и набрать ее снова. На самом деле, если вы используете набор тестов, он вам не понадобится, потому что он будет каждый раз создавать чистую фиктивную базу данных и разбирать ее для вас, когда все будет сделано.

В-четвертых, вместо «МОЛИТСЯ ...», попробуйте «Смотреть тесты пройдены».

3 голосов
/ 22 августа 2009

Спасибо всем, кто прочитал это и ищет лучший способ. Я думаю, что модульные тесты - определенно более простой подход.

Таким образом, в соответствии с документацией вам просто нужно создать файл tests.py параллельно с models.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 голосов
/ 22 августа 2009

Мне легче писать модульные тесты чаще, и я использую оболочку только тогда, когда что-то выходит из строя, и неясно, почему, и вы хотите разобраться с этим. Это немного более неэффективно в самом начале, но быстро становится прекрасным способом работы.

Я также стремлюсь сконцентрироваться на том, чтобы сделать модель более или менее стабильной и завершенной (по крайней мере, насколько это повлияет на структуру таблицы), прежде чем я буду работать с представлениями и буду нуждаться в запуске сервера. Это имеет тенденцию загружать как можно больше перезагрузок, поэтому вы делаете их, когда это дешево.

2 голосов
/ 22 августа 2009

ОК, я укушу :-) Вот что я использую:

  • MAMP . Вы получаете полностью функциональный стек Apache + MySQL + PHP + phpMyAdmin для управления веб-слоями и слоями БД. Это отлично подходит для приложений, которые выходят за рамки базового SQLite. Базовая версия бесплатна, но я пошел вперед и выбрал Pro, потому что я очень часто его использую и хотел поддержать разработчиков. Хороший способ проверить и убедиться, что все работает, начать с тестового сервера Django, затем развернуть и протестировать под MAMP на своей собственной машине и, наконец, отправить его на сайт развертывания. (Вы можете попробовать автоматизировать процесс с помощью чего-то вроде Fabric ).

  • Eclipse + PyDev + Расширения PyDev . После правильной настройки вы получаете завершение кода Python, отличную среду разработки и полную отладку. Вы можете настроить его так, чтобы он запускал тестовый сервер Django для вас, и вы могли устанавливать точки останова в любой строке в исходном коде Django или в своем собственном коде. Что мне нравится в Eclipse, так это то, что как только вы привыкнете к среде, вы также можете использовать ее для C / C ++, Java, JavaScript, Python и Flex.

  • Аптана для Затмения . Это помогает при разработке AJAX-интерфейсов и редактировании шаблонов Django, чтобы иметь приличный редактор / отладчик Javascript + HTML.

  • TextMate . Я создал проект TextMate, который включает в себя все исходные коды Django, и сохранил его в исходном каталоге Django. Таким образом, я могу быстро выполнить поиск проекта через исходный код Django и одним щелчком мыши открыть исходный файл. Вы также можете настроить его так, чтобы вы могли переключаться между редакторами Eclipse и TextMate и автоматически загружать их.

  • Достойный редактор MySQL или SQLite. С phpMySQLAdmin все в порядке, но иногда полезно иметь отдельный инструмент. SequelPro (ранее CocoaMySQL) и Navicat довольно хороши для MySQL. Одним из преимуществ является то, что после развертывания приложения вы можете использовать эти инструменты для удаленного доступа к серверу БД развертывания и настройки его с рабочего стола. Со стороны SQLite SQLiteManager и Base являются хорошими коммерческими инструментами, как и бесплатная FireFox SQLite Manager . По крайней мере, вы можете наблюдать за тем, что делает Джанго под капотом.

  • Я использую Subversion для контроля версий в основном потому, что он работает на автономном Mac Mini, который сохраняет в массив Drobo RAID плюс автоматическое резервное копирование всего на пару других внешних дисков. Это поверх Time Machine (да, я параноик :-) Раньше я использовал поддержку SVN в Eclipse, но теперь я большой поклонник Versions . В какой-то момент, когда я смогу найти хорошую схему зеркалирования, я переключусь на Mercurial, Git или Bazaar, но сейчас это работает довольно хорошо.

  • Терминал плюс куча сценариев оболочки. У каждого своя версия этого. Я довольно ленив, когда дело доходит до этих вещей, поэтому я настроил кучу ярлыков bash, чтобы помочь ускорить повторяющиеся административные задачи Django. Я опубликовал их некоторое время назад.

Большинство из них можно получить бесплатно или за умеренную плату (<100 долларов США). Но если бы мне пришлось выбирать «обязательные» элементы для разработки Django на Mac, это были бы Eclipse и PyDev. </p>

Я уверен, что есть некоторые, которые я пропустил. Приятно слышать, какие инструменты используют все остальные.

...