Содержание
- 2. Культура производства “Программист должен не забыть. Пусть будет высокая культура производства.”
- 3. Культура производства совокупность нормативных требований к технико-экономическому, организационному и эстетическому уровню производства.
- 5. С защитным кожухом гильотина требует меньшей культуры производства от рабочего. Там, где не вводят мер, облегчающих
- 6. Примеры завышенной культуры производства Что должно быть синхронным, лежит далеко Слово “прописывать” Огромное количество настроек, которые
- 7. Пример №1. Документация Ещё один пример данных, которые должны быть синхронными. Код – Документация
- 8. Пример №1. Документация Недостатки документации в Wiki Неохота исправлять Неточности незаметны Размыта ответственность Не интегрируется с
- 9. Docstrings In [65]: zip? Type: builtin_function_or_method Base Class: String Form: Namespace: Python builtin Docstring: zip(seq1 [,
- 10. Docstrings Вместе с кодом Исправить — дело нескольких секунд Неточности заметны сразу Ответственность — на авторе,
- 11. Антипример №1, Debug Toolbar INSTALLED_APPS = ( ... 'debug_toolbar',
- 12. Антипример №1, Debug Toolbar MIDDLEWARE_CLASSES = ( ... 'debug_toolbar.middleware.DebugToolbarMiddleware', ... )
- 13. Антипример №1, Debug Toolbar INTERNAL_IPS = ('127.0.0.1',)
- 14. Сборка проекта $ hg clone ssh://bitbucket.org/siberiano/course.ryba4.com course $ cd course $ make run ... Development server
- 15. Большая инструкция приводит к ошибкам Обновившиеся зависимости — это отрезанные пальцы Сборка проекта
- 16. Нужен инструмент сборки, чтобы собрать зависимости проекта на новом месте развернуть базу данных пересоздать базу данных
- 17. Файлы fixtures нужно пложить по таким путям: apps/polls/dev_fixtures/initial_data.json apps/messages/dev_fixtures/initial_data.json В настройках приходится указать FIXTURE_DIRS = (
- 18. Пути этих файлов строгие и уже содержат всю необходимую информацию, чтобы их найти. Решение проблемы: FIXTURES_DIRS
- 19. Пример №3, спрайты .folder.opened { width: 16px; height: 16px; background-image: url("icons.gif"); background-position: -64px -16px; }
- 20. Пример №3, спрайты Настройки для приложения, делающего спрайты: sprite=Sprite.create_from_local_files(['/path/to/first/file', '/path/to/second/file'])
- 21. Пример №3, спрайты # settings.py SPRITES_DIR = 'static/img/sprites' sprites/ sprite_one/ icon1.png icon2.png sprite_two/ icon3.png icon4.png
- 22. Пример №4, urls и javascript Статический файл js: $.ajax({url: '/path/to/API/', …}) Urls.py: url(r'^api/$', api_view, name='api') Связка
- 23. Пример №4, urls и javascript Функция в JS: reverse_url = function(url_name, params){ params = params ||
- 24. Пример №4, urls и javascript Middleware: class UrlReverseMiddleware(object): def process_request(self, request): if request.path_info == '/reverse_url/': query_dict
- 25. Пример №4, urls и javascript try: request.path = request.path_info = reverse(url_name, args=args) except NoReverseMatch: raise Http404
- 26. Пример №4, urls и javascript Использование: reverse_url('complicated_url', {args: [1, 2], param1: 3}); /reverse_url/?url_name=complicated_url&args=[1, 2]¶m1=3 Преимущества: Адрес
- 27. Пример №5, протоколы Так можно: def view1(request, arg1, arg2): pass def view2(request, arg1, arg2): pass
- 28. Такого стоит избегать: data ={ 'location': place.name, 'date': visit.date, 'event': 'visit', 'type_of_' + place.__class__.__name__: place.place_type, }
- 29. Изменения всегда нужно делать в паре Не отлаживается статическим анализатором Не отлаживается дебаггером
- 30. Было переписано так: data = { 'event': visit, # объект класса Event } # visit.place —
- 31. Пример №6, меню приложений Много файлов apps/app/menu.html Много файлов templates/app/url.py
- 32. Фотоальбом Календарь {% if request.user.is_authenticated() %} Входящие сообщения {% if request.user.new_msg %} ({{ request.user.new_msg }} новых)
- 33. Сложная вёрстка повторяется в шаблонах меню
- 34. urlpatterns = patterns('views', item(url(r'^photos$', 'photos', name='sport_photos'), caption='Фотографии'), item(url(r'^calendar$', 'calendar', name='sport_calendar'), caption='Календарь'), item(url(r'^inbox$', 'inbox', name='sport_inbox'), caption='Входящие', template=
- 35. {% for item in submenu %} {# права уже проверены #} {{ item }} {% endfor
- 36. Пример №6, меню приложений, итоги
- 37. Как можно делать новое приложение Проверить, нет ли готовых решений Определить кто им пользуется из разработчиков
- 39. Скачать презентацию