5

ワークフローの概要を説明します。この効率を改善する方法についていくつか提案をお願いします。今のところ、少し面倒で繰り返しが多いようです (私は嫌いなものです)。そのため、いくつかの改善を探しています。私はまだdjangoとその仕組みに慣れていませんが、私はかなり流暢なコーダーです(私見)。だからここに行きます...

ツール(私はこれらを毎日使用しているので、シフトする傾向はありません)

  • Mac OS X ヒョウ
  • テキストメイト
  • タブ付きターミナル
  • パーフォース

仮定

  • Django Basics (チュートリアルを行った/書籍を購入した)
  • Python Fluent (IDLE サポート付きで 2.6 を実行)
  • models.py で作業する最初のアプリケーションを開始する

出発

  • 内部に django ツリー全体を含む TextMate プロジェクトを作成します。

TextMate プロジェクト http://img.skitch.com/20090821-g48cpt38pyfwk4u95mf4gk1m7d.jpg

  • ターミナルの最初のタブでサーバーを起動します

    python ./manage.py runserver

  • ターミナル ウィンドウの 2 番目のタブで、シェルを開始します。

    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)
  • 最初のターミナル (実行中のサーバー) で ^C を停止し、syncdb でサーバーを起動します。

>  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")
  • それがうまくいかなかった場合、はい/いいえで壊れましたか?
    • シェルを止める
    • データベースをクリアする
    • データベースを再構築する
    • コードを修正する
    • シェルをリロードする
    • モジュールをリロードする
    • 祈る...

問題点・ご意見・ご感想

  • それは私ですか、それともこれは非常に効率が悪いように見えますか?
  • reload(module) を実行できるはずですが、これを行う方法がわかりません..誰か?
  • TextMate 内からこれをテストできるように思われますか?? 誰??
  • シェルから出るだけでも、残したいことを確認する必要があります..

これのポイントは、そこにいるすべての天才が、より生産的な仕事の方法に光を当てることです. 私は合理的な提案に対して完全にオープンです。ツールを変更するつもりはありませんが、批判は受け付けます。

4

4 に答える 4

4

まず第一に、./manage.py runserverモデルが配置されるまでは必要ありません。

次に、データベースのクリア/データベースの再構築は、コードを修正した後に実行する必要があり、次のコマンドで一気に実行できます./manage.py reset perforce

第 3 に、毎回シェルで入力していること (モデルのインポート、オブジェクトの作成の試行) は、代わりにテスト スイートで記述する必要があります。./manage.py test perforceその後、シェルを起動して再度入力する代わりに実行できます。実際、テスト スイートを使用している場合は、その必要はありません。毎回クリーンなダミー データベースが作成され、完了時に分解されるからです。

第四に、「PRAY...」ではなく、「Watch tests pass」を試してみてください。

于 2009-08-21T19:22:26.710 に答える
3

単体テストをより頻繁に作成し、何かが失敗し、その理由が明らかではなく、それを突き止めたい場合にのみシェルを使用する方がスムーズだと思います。最初のうち少し非効率ですが、すぐに素晴らしい作業方法になります。

また、ビューで作業してサーバーを実行する必要がある前に、モデルを多かれ少なかれ安定させて完全なものにすることに集中する傾向があります (少なくともテーブル構造に影響を与えるものについては)。それはできるだけ多くのリセットを前倒しする傾向があるため、安価なときにそれらを実行しています.

于 2009-08-21T20:38:53.230 に答える
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 test を実行するだけでテストが実行されますが、これはかなり制限されたビューであり、プログラムのスワップイン/アウトを行う必要があります。 ⌘R を使用したテキストメイト。

上部に import 行を追加し、下部にいくつかの行を追加します。

from django.test.simple import run_tests
#
# Unit tests from above
#
if __name__ == '__main__':
  run_tests(None, verbosity=1, interactive=False)

そして今、⌘R は TextMate から直接動作します。

于 2009-08-21T22:16:39.913 に答える
2

OK、噛んでみます :-) 私が使っているものは次のとおりです。

  • マンプ。完全に機能する Apache + MySQL + PHP + phpMyAdmin スタックを取得して、Web レイヤーと DB レイヤーを管理します。基本的な SQLite を超えるアプリに最適です。基本バージョンは無料ですが、私は Pro を頻繁に使用し、開発者をサポートしたかったので、先に進んで Pro を購入しました。テストしてすべてが機能することを確認する良い方法は、Django テスト サーバーで開始し、自分のマシンの MAMP で展開してテストし、最後に展開サイトにプッシュすることです。( Fabricのようなものでプロセスを自動化しようとすることができます)。

  • Eclipse + PyDev + PyDev 拡張機能。適切に構成すると、Python コード補完、優れた開発環境、および完全なデバッグが得られます。Django テスト サーバーを実行するように構成でき、Django ソースまたは独自のコードの任意の行にブレークポイントを設定できます。私が Eclipse で気に入っている点は、環境に慣れれば、C/C++、Java、JavaScript、Python、および Flex コーディングにも使用できることです。

  • Eclipse 用のアプタナ。AJAX フロント エンドを開発し、Django テンプレートを編集して適切な Javascript + HTML エディター/デバッガーを使用する場合に役立ちます。

  • テキストメイト。すべての Django ソースを含む TextMate プロジェクトを作成し、Django ソース ディレクトリに保存しました。このようにして、Django ソースからプロジェクトをすばやく検索し、ソース ファイルを 1 回クリックするだけで開くことができます。また、Eclipse エディターと TextMate エディターの間を行ったり来たりして、それらを自動リロードできるように設定することもできます。

  • まともな MySQL または SQLite エディター。phpMySQLAdmin は問題ありませんが、スタンドアロンのツールを使用するとよい場合もあります。SequelPro (以前の CocoaMySQL) とNavicatはすべて MySQL に適しています。利点の 1 つは、アプリがデプロイされると、これらのツールを使用してデプロイメント DB サーバーにリモートでアクセスし、デスクトップから微調整できることです。SQLite 側では、無料のFireFox SQLite Managerと同様に、 SQLiteManagerBaseが優れた商用ツールです。少なくとも、Django が内部で何をしているかを見ることができます。

  • 私がバージョン管理に Subversion を使用しているのは主に、Drobo RAID アレイに保存し、他のいくつかの外付けドライブにすべてを自動バックアップするスタンドアロンの Mac Mini で実行されるためです。これは Time Machine の上にあります (はい、私は偏執的です :-) 以前は Eclipse の SVN サポートを使用していましたが、今ではVersionsの大ファンです。適切なミラーリング スキームを見つけたら、Mercurial、Git、または Bazaar に切り替えますが、今のところ、これでうまくいきます。

  • ターミナルと多数のシェル スクリプト。誰もがこれの独自のバージョンを持っています。私はこれらのことに関してはかなり怠け者なので、反復的な Django 管理タスクを高速化するために、たくさんの bash ショートカットをセットアップしました。しばらく前にこれらを投稿しました。

これらのほとんどは、無料または中程度の料金 (< $100) で利用できます。しかし、Mac での Django 開発に「必須」のアイテムを選ぶとしたら、それは Eclipse と PyDev でしょう。

見逃したものもあると思います。他の人が使用しているツールを聞くのは素晴らしいことです。

于 2009-08-21T22:07:43.147 に答える