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

Правильно ли я понимаю приложения django?

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

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

6
iJK 7 Июн 2010 в 05:44

4 ответа

Лучший ответ

Во-первых, большие файлы довольно распространены в Python. Python - это не Java, который имеет один класс на файл, а один модуль на файл.

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

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

7
Lakshman Prasad 7 Июн 2010 в 05:53

Ответ на этот вопрос может быть полезным тебе.

0
Community 23 Май 2017 в 12:30

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

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

views.py

А также

views/__init__.py

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

from views import my_view

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

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

views/__init__.py
views/largemodel_view.py

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

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

class MyModel(models.Model):
    ...

    class Meta:
        app_name = 'yourappname'

Потому что django не получит его волшебным образом для администратора (но все равно загрузит его, благодаря Python!)

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

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

И т.п.

Хотя, конечно, нет предела (URL тоже могут быть разделены и т. д.)

1
Stefano 31 Июл 2013 в 23:57

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

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

То же самое относится и к models.py.

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

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

1
cethegeek 7 Июн 2010 в 02:44