0

まず、私はPythonとDjangoの両方にまったく慣れていないということで、この前置きをさせてください。私はすでに知っている言語を使用したいと思います。残念ながら、フレームワークはそれらのために存在しません。結論として、私は「pythonista」ではありません。

とにかく、私はDjangoチュートリアルの最初の数ページにいて、データモデルを作成しているところです。すぐに、この例では、モデル内の文字フィールドの最大長などがハードコードされていることがわかります。この情報は頻繁に変更され、多くの場所で必要になるだけでなく、別のプログラミング言語でバックエンドアプリケーションをコーディングするときにも使用されるため、これは単純に行いません。

重要な問題は、バックエンドのものにPythonを使用しないことです。別の言語を使用します。その言語のプログラムは、文字フィールドの最大長などにアクセスする必要があります。

私が使用している他のどの言語でも、これは簡単なことです。MAXLENGTHというファイルに最大長のようなものを貼り付け、必要な場所にそのファイルを含めます。最大長を変更する必要がある場合(そして変更する場合)、1か所で変更します。その後、他のどの言語が使用されていても、他のすべての場所で変更されます。

Python / Djangoでこの機能が必要です。または、最小限の手間で同様の効果を実現できるものが必要です。importステートメントを見つけましたが、希望どおりに機能していないようです(Pythonコードをインポートしているようですが、ここではPythonのみのソリューションを使用できません)。

クラスの複雑な宣言がたくさん含まれているエキゾチックで複雑なソリューションを楽しませる可能性は低いことに注意してください。それは単純な問題です、私は単純な解決策が必要です。

また、PythonまたはDjangoのいずれかでソリューションを受け入れます(Djangoにこの点で特別な機能がある場合)。

どうもありがとう。

4

3 に答える 3

1

ジャンゴの一般的な方法

これがあなたが求めているものに最も近いと思います。django で作成したアプリはsettings.py、ユーザーが構成できるようにカスタム設定をセットアップできます。これにより、簡単に配布できます。ここを読む:
https://docs.djangoproject.com/en/1.4/topics/settings/#creating-your-own-settings

デフォルトを設定し、それらを文書化します。その後、ユーザーはsettings.pyプロジェクトの でそれらをオーバーロードして、値をカスタマイズできます。

django ではあまり一般的ではありませんが、一般的なプログラミングの観点からはおそらく一般的な方法です

「マジック ナンバー」に関して言えば、データベース フィールド プロパティが実際にマジック ナンバーであるとは思いません。これは通常、モデルの設計に固有のものですが、本当に settings.py を使用したくない場合、および定数モジュールだけが必要な場合は、次のようにします。

定数.py

MODEL1_FIELD1_MAXLENGTH = 100

models.py

import constants

a = CharField(max_length=constants.MODEL1_FIELD1_MAXLENGTH)

しかし、正直なところ、これが頻繁に発生することはありません。値は通常、デザインと密接に結びついており、書式設定の状況など、モデルを使用する他のコードに影響を与えます。エンドユーザーが内部バッファに任意の値を設定できるようにするようなものです。設計上の決定の一部であるため、妥当なバッファーを期待するコードに影響を与える可能性があります。しかし、私は一般的な観点から定数の考え方を理解しています。この特定のフレームワーク、この特定の領域ではそれほど一般的ではありません。

技術的には、構成ファイルに JSON のような一般的な形式を使用できますが、いつ、どのようにデコードするかを決定する必要があります。django では、モジュールは一度ロードされると、django インスタンスの存続期間中ロードされたままになります。これは、操作の順序を保証するために settings.py から初期化するものである可能性があります。

config.json

{
    "MAX_LENGTH": 100
}

定数.py

import json

CONSTANTS = {}
CONSTANTS_FILE = "config.json"

def initConstants():
    global CONSTANTS_FILE
    with open(CONSTANTS_FILE) as f:
        CONSTANTS_FILE = json.load(f)
        print CONSTANTS_FILE
        # {"MAX_LENGTH": 100}
于 2012-05-20T01:38:29.380 に答える
0

コメントに加えて、jdi によって、max_length プロパティを CharField に追加する必要がありますが、できることは次のとおりです。

models.py またはその他の「共通」ファイルの先頭にプロパティを追加します。

MAX_LENGTH=100

次に、 Commpn.py をインポートします

a = CharField(max_length=Common.MAX_LENGTH, ....)

これがお役に立てば幸いです...

于 2012-05-20T00:06:48.763 に答える
0

これはロケット科学ではありません。

定数ファイル (constants.txt など) を作成します。名前と値のペアを簡単に解析できる形式でそのファイルに入れます。たとえば、名前:値。選択した言語で小さなプログラムを作成します (これには Python が最適です)。このプログラムは、constants.txt を読み取り、使用する言語ごとに適切なファイル (constants.py、constants.h など) を書き出します。

たとえば、constants.txt に「MODEL1_FIELD1_MAX_LENGTH: 20」というエントリが含まれている場合、constants.h には「#define MODEL1_FIELD1_MAX_LENGTH 20」という形式のエントリが含まれる可能性がありますが、constants.py には「MODEL1_FIELD1_MAX_LENGTH=20」という形式のエントリが含まれます。 '。あなたは絵を手に入れます。

ここで、constants.txt が変更されるたびに、プロジェクトのビルド プロセスの一部として、その小さなプログラムが自動的に実行されるようにします。

定数は 1 つのファイルに保持されますが、常に同期され、使用するどの言語でも使用できます。

于 2012-05-20T02:01:16.300 に答える