2010-06-07 4 views
5

Я читал учебник по django, и кажется, что все функции просмотра должны находиться в файле под названием «views.py», и все модели входят в «models.py». Я боюсь, что в моем файле view.py могу оказаться много функций просмотра, и то же самое происходит с models.py.django app organization

Является ли мое понимание приложений django правильным?

Приложения Django позволяют нам разделять общие функции в разных приложениях и поддерживать минимальный размер файлов и моделей. Например: Мой проект может содержать приложение для рецептов (создание, обновление, просмотр и поиск) и приложение для друзей, приложение комментариев и т. Д.

Могу ли я перенести некоторые из моих функций просмотра в другой файл? Значит, у меня есть только CRUD в одном файле?

ответ

7

Во-первых, большие файлы довольно распространены в python. Python не является java, который имеет один класс для каждого файла, а не один модуль для каждого файла.

Далее, views, даже в качестве стандартного используется python module. Модуль не обязательно должен быть одним файлом. Это может быть каталог, содержащий много файлов, и __init__.py

И тогда views.py - это только конвенция. Вы,, ссылаетесь на него, и сам django нигде не ссылается. Таким образом, вы можете вставить столько файлов и передать соответствующие функции, которые необходимо передать, в urls.py

+2

Лучший ответ. Я бы добавил, что другие разработчики django будут иметь определенные ожидания от вашего приложения - например, найти view.py или пакет представлений. Так что не сходите с ума из пути Django, если вы ожидаете, что другие разработчики будут поддерживать ваш код в какой-то момент. – cethegeek

1

Они не могут быть в виде views.py. На них нужно ссылаться.

views.py может содержать другие файлы. Итак, если вы чувствуете необходимость, вы можете создавать другие файлы в одном приложении, которые содержат ваши функции просмотра, и просто включать их в views.py.

То же применимо к models.py.

Django приложения позволяют нам разделить общую функциональности в различные приложения и сохранить размер файла взглядов и моделей к минимуму? Например: Мой проект может содержать приложение для рецептов (создание, обновление, просмотр и поиск) и приложение для друзей, приложение для комментариев и т. Д. .

Я не знаю о «минимальной» части - некоторые приложения просто большие, а другие большие модели. Вы должны стремиться к разделению вещей хорошо, но иногда есть только много кода. Но кроме этого, это справедливое резюме приложений Django, да.

+0

Я могу видеть, как я могу создать каталог «views» и сохранить функции просмотра в другом файле. Я не вижу, как я могу сделать то же самое с моделями. Чтобы разделить мои представления, я создал каталог представлений, который я использую в каталоге usrls.py. – iJK

1

Мне также очень не нравятся длинные файлы.

Конечно то, что вы читали в других ответах это верно, но я использовать некоторые очень ловкий питона эквивалентности:

views.py 

и

views/__init__.py 

являются в значительной степени функционально равно - я имею в виду что если оба содержат def my_view(), то

from views import my_view 

будет работать одинаково в оба случая!

Оттуда легко структурировать свои длинные файлы на более мелкие, но сохраняя соглашение об именах, каждый разработчик Джанго используется для:

views/__init__.py 
views/largemodel_view.py 

затем в __init__.py не забудьте импортировать мнения из largemodel_view.py ,

С большими приложениями я сделать то же самое с моделями, хотя вы должны помнить, чтобы установить Meta.app_name:

class MyModel(models.Model): 
    ... 

    class Meta: 
     app_name = 'yourappname' 

, потому что Джанго не подберет его магически иначе для администратора (но он все равно будет загружать его, спасибо ! в Python)

поэтому мои приложения обычно в конечном итоге выглядеть примерно так:

project/settings/__init__.py 
       /..othersettings.. 
     /app_1/models/__init__.py 
        /... 
      /views/__init__.py 
        /... 
      /templates/ 
      /static/ 
      urls.py 
     /urls.py 

т.д.

хотя, конечно, нет ограничений (URL-адреса тоже могут быть разделены и т. Д.)