Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包括Python/Django所需的_Python_Django_Include - Fatal编程技术网

包括Python/Django所需的

包括Python/Django所需的,python,django,include,Python,Django,Include,首先,让我先说我对Python和Django都是全新的。我想使用一种我已经知道的语言,喜欢并且更喜欢,唉,这些框架根本不存在。总之,我不是“蟒蛇主义者” 无论如何,我正在Django教程的前几页上,并且正在创建数据模型。我马上就看到了这个示例硬编码的东西,比如模型中字符字段的最大长度。这是我绝对不会做的事情,因为这些信息不仅会经常更改并且在许多地方都是必需的,而且在我用另一种编程语言编写后端应用程序时也会用到这些信息 关键的问题是,我不会在后端使用python。我将使用另一种语言。使用该语言的程

首先,让我先说我对Python和Django都是全新的。我想使用一种我已经知道的语言,喜欢并且更喜欢,唉,这些框架根本不存在。总之,我不是“蟒蛇主义者”

无论如何,我正在Django教程的前几页上,并且正在创建数据模型。我马上就看到了这个示例硬编码的东西,比如模型中字符字段的最大长度。这是我绝对不会做的事情,因为这些信息不仅会经常更改并且在许多地方都是必需的,而且在我用另一种编程语言编写后端应用程序时也会用到这些信息

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

在我使用的任何其他语言中,这都是一个简单的问题。我只需在一个名为MAXLENGTH的文件中粘贴一个类似于max length的东西,并将该文件包含在我需要的任何地方。如果“最大长度”(max length)需要更改(而且会更改),我会在一个地方更改它。然后,在所有其他地方,无论使用什么其他语言,它都会被更改

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

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

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


非常感谢。

关于jdi的评论,您需要将max_length属性添加到CharField属性中,但您可以做的是:

在models.py或任何其他“通用”文件的顶部添加属性,例如:

MAX_LENGTH=100
然后,导入Commpn.py

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

希望这能帮助你…

在django的常见方式

我相信这是最接近你要求的。在django中创建的任何应用程序都可以在
settings.py
中设置自定义设置,供用户配置。这使得分发变得容易。阅读这里:

您可以设置默认值,并记录它们。然后用户可以在项目的
settings.py
中重载它们以自定义值

django中不太常见的方法,但从一般编程的角度来看可能很常见

就“幻数”而言,我不认为数据库字段属性真的是幻数。它通常是特定于模型设计的,但是如果您确实不想使用settings.py,并且您只需要一个常量模块,那么只需执行以下操作:

常数.py

models.py

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

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

config.json

常数.py


这不是火箭科学

创建一个常量文件,比如constants.txt。将名称/值对以易于解析的格式放入该文件中。例如name:value。用您选择的语言编写一个小程序(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”的条目。你明白了

现在,只要修改了time constants.txt,这个小程序就可以作为项目构建过程的一部分自动运行


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

首先,您必须将django模型中字段的最大长度指定为硬编码值,因为它与ORM 1对1关联并自动创建数据库表。您的表已硬编码为该值。此值不会随机更改。第二,我不太明白你的问题是什么。你只是想要一个常数模块?您看过django中的标准
settings.py
了吗?你有没有读过模型是如何与数据库结合工作的?我也不明白这个“问题”。DB表知道最大长度,因此与数据库交互的任何其他语言/应用程序都可以从表中获取最大长度。不知道为什么这个问题很难理解-让我再试一次。除了新手程序员以外的任何人都知道,你不会在程序中硬编码“幻数”(值)。你把它放在常量、宏、定义的顶部。这样,您可以更改它一次,它将在引用的代码中的任何地方更改。你们已经知道了。现在问题是,我不能在顶部使用“常量”,因为我也需要这个常量
MODEL1_FIELD1_MAXLENGTH = 100
import constants

a = CharField(max_length=constants.MODEL1_FIELD1_MAXLENGTH)
{
    "MAX_LENGTH": 100
}
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}