Django:将forms.py拆分为多个文件

2 投票
3 回答
2015 浏览
提问于 2025-04-16 21:19

我有一个很长的 forms.py 文件,我想把它拆分成几个小部分,并且尽量少改动代码。

有没有什么好主意?

3 个回答

0

如果你真的想尽量少改动,可以把forms.py文件按功能拆分成多个文件,比如forms_user.py和forms_product.py,这样是最简单的。

如果你有时间重构代码,或者是刚开始一个新项目,最好的办法是为项目的每个部分创建一个新的django应用,比如用户部分、项目部分等等,每个应用都有自己的forms.py文件。如果一个django应用变得太大,很多东西就会变得难以扩展,比如models.py、views.py等,维护起来也会变得更加困难。

8

我不能评论,所以我写了这个回答。你可以做的另一件事是,在你的应用程序目录下创建一个 forms 文件夹(记得要有 __init__.py 文件),然后把你的表单分成 formone.py、form2.py 等等。

这样你就可以像这样导入表单:from myapp.forms.formone import FormOne

或者在 __init__.py 文件里,你可以放入以下代码:

from formone import *
from form2 import *

这样你就可以用 from myapp.forms import FormOne 来导入表单了。

2

我们把Django的表单类放到一个叫forms.py的文件里,主要是为了遵循一种约定。这样做可以让其他人更容易理解你的应用程序,知道在某个文件里能找到什么内容。遵循这种约定是个好习惯,但并不是硬性规定,你可以根据自己的喜好来组织代码。

我会这样做:

首先,看看能不能通过提取重复的代码来减少代码量。比如一些常用的验证逻辑可以放到自定义验证器里。如果有多个表单共享某些字段或功能,可以让它们继承一个共同的父类。

如果你创建了自定义字段类,可以把这些类放到一个叫formfields.py的文件里,然后在forms.py中导入它们。同样,如果你有自定义的验证器,也可以把它们单独放出来并导入。

如果这些方法都不能有效减少文件大小,我会根据功能把表单类拆分成几个文件,比如forms_user.pyforms_products.pyforms_data_entry.py等等。这样一来,文件的内容依然很清晰。你需要在引用旧表单的地方修改导入语句,但这应该是唯一需要更改的地方。

撰写回答