0

首先,让我先说我对 Python 和 Django 都是全新的。我想使用我已经知道、喜欢和喜欢的语言,可惜框架根本不存在。归根结底,我不是“pythonista”。

无论如何,我在 Django 教程的前几页,并且正在创建数据模型。我立即看到该示例对模型中的字符字段的最大长度等内容进行了硬编码。这是我根本不会做的事情,因为这些信息不仅会经常更改并且在许多地方都需要,而且当我用另一种编程语言编写后端应用程序时也会使用它。

关键问题是,我不会将 python 用于后端。我将使用另一种语言。该语言的程序将需要访问诸如字符字段的最大长度之类的内容。

在我使用的任何其他语言中,这都是一件简单的事情。我只是在一个名为 MAXLENGTH 的文件中粘贴了类似最大长度的内容,并将该文件包含在我需要的任何地方。如果最大长度需要改变(它会改变),我会在一个地方改变它。然后在所有其他地方更改它,无论使用什么其他语言。

我需要 Python/Django 中的这种功能,或者以最少的麻烦达到类似效果的东西。我确实找到了一个 import 语句,但它似乎并没有完全符合我的要求(它似乎导入了 Python 代码,但我不能在这里使用纯 Python 的解决方案)。

请注意,我不太可能接受涉及大量复杂类声明的异国情调、复杂的解决方案等等。这是一个简单的问题,我需要一个简单的解决方案。

另外,我会接受 Python 或 Django 中的解决方案(如果 Django 在这方面有一些特殊能力)。

非常感谢。

4

3 回答 3

1

django中的常用方式

我相信这是最接近你所要求的。您在 django 中创建的任何应用程序都可以在 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

模型.py

import constants

a = CharField(max_length=constants.MODEL1_FIELD1_MAXLENGTH)

但老实说,我不经常看到这种情况发生。该值通常与设计紧密耦合,并对将使用该模型的其他代码产生影响,例如格式化情况等。它有点像允许最终用户为内部缓冲区设置任意值。它可能会影响期望合理缓冲区的代码,因为它是设计决策的一部分。但我确实从一般的角度理解常量的概念。在这个特定的框架中,在这个特定的领域,它并不常见。

从技术上讲,您可以为配置文件使用 JSON 等通用格式,但您必须决定如何以及何时解码。在 django 中,模块会被加载一次,并在 django 实例的整个生命周期内保持加载状态。这可能是您从 settings.py 初始化的内容,以确保操作顺序。

配置文件

{
    "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,就可以将这个小程序作为项目构建过程的一部分自动运行。

你去 - 你的常量保存在一个文件中,但始终同步并可用于你使用的任何语言。

于 2012-05-20T02:01:16.300 回答