Фронтальный прототип / скелет в Джанго - PullRequest
3 голосов
/ 25 февраля 2011

Часто я создаю статический HTML prototype/skeleton для внутренних разработчиков, с которыми я работаю.Это помогает находить ошибки в UI / IA и дорогостоящую переписывание перед внедрением сайта.

Я хотел бы сделать еще один шаг и создать эти prototypes/skeletons in Django.Под прототипом / скелетом я подразумеваю связанные статические страницы, которые позже можно легко подключить к бэк-энду.

Я хотел бы получить suggestions/ideas, как я должен настроить свои шаблоны / ссылки, чтобы они были легкимиработать позже на этапе реализации.

Краткий список требований, которые мне приходят на ум:

  1. Организация шаблонов, в то время как весь проект будет состоять из нескольких приложений
  2. Чистый диспетчер URL и создание ссылок
  3. Возможность отображения состояний входа / выхода

Ответы [ 2 ]

10 голосов
/ 25 февраля 2011

Я предполагаю, что в более традиционном подходе дизайнеры пользовательского интерфейса и серверные разработчики работают на двух концах спектра разработки и, надеюсь, доброжелательно сходятся где-то посередине.Если вы захотите испачкать руки написанием нескольких строк кода, вы можете выложить всю архитектуру приложения для разработчиков, потому что у вас есть преимущество - ваше непосредственное отношение к пользователям, данным, которые они потребляют, ивзаимодействия, которые они должны выполнить.Это отнимает у разработчиков большую часть догадок, теперь нужно только заполнить дыры, соединить точки или что у вас есть.

Первое, что вы должны сделать, это собраться вместе и установить некоторые общие основания.,Как правило, это включает в себя выполнение модульности в самом начале.Возьмите все основные функции и разбейте их на несколько приложений Django, которые собираются обернуть шаблон, просмотреть и моделировать триады, относящиеся к определенной функции, предоставляемой приложением.Чем больше, тем лучше здесь, так что не беспокойтесь, если у вас будет много приложений, потому что вы никогда не захотите иметь одно приложение, предоставляющее слишком много функций / размещающее слишком много компонентов.Обычно вы начинаете с приложений, таких как registration, authentication, profiles (пользователь), и работаете дальше.Например, вы можете втиснуть все три в одно приложение, но в итоге у вас будет много шаблонов, множество представлений, возможно, две или три модели, но тесты действительно станут серьезной проблемой.Итак, разбейте все на эти блоки приложений, пока не почувствуете, что каждая часть системы естественным образом встает на свои места на концептуальном уровне.Если вы когда-нибудь задумывались над тем, где что-то разместить, или вы смотрите на модуль длиной в несколько страниц и испытываете желание разбить модуль (models.py, views.py, test.py) на пакет с множеством внутрипакетных пакетов.модули, вы, вероятно, должны немедленно изменить архитектуру.Всегда помните, что ваши усилия направлены на то, чтобы поразить вашу архитектуру простотой.

Как только это будет сделано, вы действительно выполнили половину работы.Отличительной особенностью Django является то, что у вас слабая связь между URL-адресами и представлениями.Сами представления обеспечивают поведение приложения и упрощают представление.Если вы можете правильно выложить основные URL-адреса и заглушить представления, просто создавая статические шаблоны, вы только что проделали хорошую работу.

Вот как это достигается.Вы можете абстрагировать URL-адреса и представления, на которые они отображаются, назвав свои шаблоны, такие как authentication:login, authentication:logout, registration:register, registration:confirm, registration:activate и т. Д. Таким образом вы привязываете свои внутренние компоненты ко всемпредоставляемое поведение, которое не должно меняться.Затем вы всегда можете изменить шаблон URL для authentication:login, изменить представление, на которое отображается шаблон, но вы ссылаетесь на него по внутреннему имени, так что вы можете, скажем, поменять представления, которые только что произвели статические шаблоны, на полную мощность.просматривать без каких-либо дополнительных изменений в вашем коде.

Итак, вот как это работает в реальной жизни:

  1. Мозговой штурм, выберите приложения и функции, которые они будут предоставлять, ипересмотрите свои решения.
  2. Начало работы с приложением core, в котором будут размещаться некоторые специфические для проекта функции, такие как базовые шаблоны и представление / root.
  3. Создание /core/templates/core/base.htmlон будет загружать все распространенные файлы CSS / JS, которые будут использоваться для всего сайта, которые будут определять разделы верхнего и нижнего колонтитула (блоки шаблона), и который будет использовать контекстные переменные для метаданных страницы, такие как заголовок, описание, ключевые слова и роботы.Ваш типичный «один шаблон для управления всеми», биты, которые будут присутствовать в структуре / представлении для всех ваших страниц.
  4. Создайте простое /core/temaplates/core/welcome.html, которое расширяетсяосновной шаблон и принты "Hello world!"в области содержимого.
  5. Добавьте следующее к /core/urls.py:

    from django.conf.urls.defaults import *
    from django.views.generic import TemplateView  
    
    
    urlpatterns = patterns('',
    
        # Welcome
        url(
            r'^$', TemplateView.as_view(template_name='core/welcome.html'),
            name='welcome'
        ),
    
    )
    
  6. Подключите его в основном /urls.py:

    from django.conf.urls.defaults import *
    from django.contrib import admin
    
    
    admin.autodiscover()
    
    urlpatterns = patterns('',
        url(ur'^', include('core.urls', namespace='core')),
        url(ur'^admin/doc/', include('django.contrib.admindocs.urls')),
        url(ur'^admin/', include(admin.site.urls)),
    )
    
  7. Нажмите http://localhost:8080/, см. «Hello World!», Наслаждайтесь теплым нечетким ощущением.

  8. Повторите то же самое для остальных приложений: создайте приложение, создайтешаблоны, присвойте им имена, сопоставьте их со статическим шаблоном, подключите его к пространству имен в главном urlconf.

Вы можете продвинуть представления еще дальше к готовности к работе для разработчиков.Это может зависеть от разработчиков и их руководств по стилю, но мне нравится держать мой /urls.py в чистоте от всего, кроме шаблонов, имен и отображений.Ваш /core/urls.py может выглядеть следующим образом:

from django.conf.urls.defaults import *
from core import views


urlpatterns = patterns('',

    # Welcome
    url(
        r'^$', views.Welcome.as_view(),
        name='welcome'
    ),

)

Редактировать /core/views.py со следующим:

from django.core.views.generic import TemplateView

class WelcomeView(TemplateView):

    template_name='core/welcome.html'

    extra_context={
        'page_title': 'Welcome!',
        'page_keywords': 'relevant,page,keywords',
        'page_description': 'Something equally relevant',
    }

    def get_context_data(self, **kwargs):
        context = super(WelcomeView, self).get_context_data(**kwargs)

        context.update(self.extra_context)
        return context

И это один надежный и компактный вид, заполненный метаданными страницы!Определенно материал, который принесет вам пиво от разработчиков.Продолжайте делать это для всех представлений, чтобы выкачать статические шаблоны.Когда кто-то подходит к завершению представлений, ему просто нужно унаследовать от другого класса представлений, добавить недостающие функции, расширить контекст, изменить шаблон и вуаля - он готов к производству.

Там нетвам понадобится много предварительных знаний, чтобы сделать это возможным, но это действительно отнимает много догадок для разработчиков, которые, естественно, больше заботятся о создании остальной части приложения.Это также достаточно просто, чтобы стать действительно хорошим, я думаю, никто не возражает позволить вам делать всю эту работу.Как добавлено, вы, вероятно, не будете в курсе того, как контекст шаблона заполняется в представлениях, поэтому даже вы можете начать развертывать более сложные представления или, по крайней мере, иметь возможность их читать.

6 голосов
/ 25 февраля 2011

Когда я запускаю приложение, я обычно делаю также прототипную версию в Django.Я просто использую общие представления direct_to_template, которые впоследствии могут быть заменены представлениями, которые создают разработчики.Поскольку у вас есть несколько приложений, вы можете хранить определенные шаблоны приложений в папке в папке шаблонов, которая имеет то же имя, что и приложение.

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

Вам может потребоваться немного кода, если вы хотите, чтобы отображалось состояние входа / выхода, но это, безусловно, выполнимо.

...