Это - действительно просто вопрос "о лучших практиках"...
Я нахожу, что При разработке приложения, часто заканчиваю с большим количеством представлений.
Это - обычная практика для разбивания этих представлений в несколько файлов представления? Другими словами... вместо того, чтобы просто иметь views.py, действительно ли распространено иметь views_1.py, views_2.py, views_3.py (но названный более соответственно, возможно, по категориям)?
views.py
Большая часть вашего кода, вероятно, ожидает, что ваши представления будут доступны как myapp.views.viewname
. Один из способов, которым я видел, как люди разделяют свои взгляды, но сохраняют это имя Python, - это создание каталога views /
. views / __ init __. Py
будет иметь:
from .foo_views import *
from .bar_views import *
from .baz_views import *
Затем в views / foo_views.py
введите:
def foo_detail(request, ...):
# your code here
def foo_list(request, ...):
# your code here
def your_other_view(...):
# ...
и т. Д.Итак, вы перемещаете все из views.py
в файлы в этом каталоге, делаете __ init __. Py
, удаляете views.py
, и все готово.
Затем, когда вы импортируете myapp.views
, myapp.views.foo_detail
будет ссылаться на функцию, которую вы определили в views / foo_views.py
.
Эта стратегия также должна работать для admin.py
и т. Д. Но если вы хотите разделить models.py
таким образом, вам понадобится добавить app_label = 'your_app_name'
в класс Meta:
всех ваших моделей. Например, unicorn_app / models / unicorns.py
может иметь такую запись:
class Unicorn(models.Model):
description = models.CharField(max_length=80)
class Meta:
app_label = 'unicorn_app'
(В противном случае Django считает, что модель Unicorn
является частью приложения Django под названием «models ", что приводит к сбоям в работе административного сайта. Текущая версия до 1.6 - грядущая версия 1.7 уберет это требование .)
Другой вариант - переместить некоторые функции в одно или несколько приложений. Это позволит вам перемещать также формы и шаблоны и сохранять структурированность. Вам не обязательно перемещать модели, что избавляет вас от миграции моделей и данных.
Например, у вас может быть следующая структура:
main_app/
|_models.py
|_views.py
|_forms.py
|_urls.py
|_templates/
sub_app_1/
|_views.py
|_forms.py
|_urls.py
|_templates/
sub_app_2/
|_views.py
|_forms.py
|_urls.py
|_templates/
В качестве общего правила подумайте о удобочитаемости и ремонтопригодности : "views.py" по умолчанию - это просто предложение , сделанное начальным шаблоном - вы делаете не надо его придерживаться.
Обычно трудно поддерживать файлы с тысячами строк кода, поэтому я обычно пытаюсь разбить большие модули на более мелкие.
С другой стороны, разделение должно иметь смысл - разделение связанных функций на несколько файлов с большим количеством операций импорта может еще больше затруднить обслуживание.
Наконец, вы также можете подумать о совершенно других способах упрощения вашего приложения.
Вы видите повторяющийся код? Может, какой-то функционал можно было перенести в совсем другое приложение? И так далее.