Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Что нового в Django 1.4

Что нового в Django 1.4

Илья Барышев

Галопом по Европам об основных фичах релиза Django 1.4. Обзорный доклад освещает самые "вкусные" новинки: поддержку таймзон, python 2.5+, улучшения по ORM, новую структуру проекта, шаблоны и многое другое.

Moscow Python Meetup
PRO

April 05, 2012
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Что нового в Django 1.4
    Илья Барышев
    Moscow Django Meetup #2

    View Slide

  2. Чуточку статистики
    • ровно 1 год разработки
    • ~1900 коммитов
    • 28 core committers
    • 524 человека в AUTHORS.txt

    View Slide

  3. Версии Python
    Django 1.3 Python 2.4-2.7
    Django 1.4 Python 2.5-2.7
    Django 1.5 Python 2.6-3.3*

    View Slide

  4. Часовые пояса

    View Slide

  5. ORM
    • bulk_create()
    • select_for_update()
    • prefetch_related()

    View Slide

  6. Структура проекта
    До 1.4 С 1.4
    mysite/
           __init__.py
           manage.py
           settings.py
           urls.py
           myapp/
                   __init__.py
                   models.py
    manage.py
    mysite/
           __init__.py
           settings.py
           urls.py
           myapp/
                   __init__.py
                   models.py

    View Slide

  7. Новый manage.py
    #!/usr/bin/env  python
    import  os,  sys
    if  __name__  ==  "__main__":
       os.environ.setdefault("DJANGO_SETTINGS_MODULE",
                                                   "{{  project_name  }}.settings")
       from  django.core.management  import  execute_from_command_line
       execute_from_command_line(sys.argv)

    View Slide

  8. Шаблон проекта
    project_name/
           fixtures/
           public/
           static/
           templates/
           __init__.py__
           __local_settings.py
           local_settings.py
           settings.py
           urls.py  
           wsgi.py
    .gitignore
    manage.py
    requirements.txt
    http://bit.ly/django_project_template
    django-­‐admin.py  startproject  -­‐-­‐template=  

    View Slide

  9. Админка
    • Пользовательские фильтры
    • Множественная сортировка
    • Новые методы ModelAdmin
    • ModelAdmin.save_related(self,  request,  form,  formsets,  change)
    • ModelAdmin.get_list_display(self,  request)
    • ModelAdmin.get_list_display_links(self,  request,  list_display)
    • ADMIN_MEDIA_PREFIX deprecated

    View Slide

  10. Шаблоны
    • {%  elif  %}
    • {%  static  %}
    • |truncatechars
    • Key-value аргументы для тегов
    • assignment-теги
    • Контекстные пометки для перевода

    View Slide

  11. Assignment-теги
    @register.assignment_tag
    def  get_current_time(format_string):
           return  datetime.datetime.now().strftime(format_string)
    {%  get_current_time  "%Y-­‐%m-­‐%d  %I:%M  %p"  as  the_time  %}
    The  time  is  {{  the_time  }}.

    View Slide

  12. Контекстные пометки
    для перевода
    {%  trans  "May"  context  "month  name"  %}
    {%  trans  "May"  context  "verb"  %}
    {%  blocktrans  with  name=user.username  context  "greeting"  %}
           Hi  {{  name  }}
    {%  endblocktrans  %}

    View Slide

  13. URL i18n

    View Slide

  14. Безопасность
    • Новый механизм хэширования паролей
    • Защита от кликджекинга (clickjacking)
    • Улучшения в защите от CSRF- и XSS-атак

    View Slide

  15. Криптографическая
    подпись
    • Низкоуровневое API (Signer)
    • Бэкенд сессий на подписанных куках
    • Новый FormWizard на CBV

    View Slide

  16. Тестирование
    • with  TestCase.settings(**kwargs)
    • и @TestCase.override_settings(**kwargs)
    • SimpleTestCase
    • assertRaisesMessage(expected_exception,  
    expected_message,  callable_obj=None,  *args,  **kwargs)
    • assertFieldOutput(self,  fieldclass,  valid,  invalid,  
    field_args=None,  field_kwargs=None,empty_value=u'')
    • assertHTMLEqual(html1,  html2,  msg=None)

    View Slide

  17. Браузерное тестирование
    class  AdminSeleniumWebDriverTestCase(LiveServerTestCase):
           ...
    class  DateTimePickerSelenium(AdminSeleniumWebDriverTestCase):
           def  test_show_hide_date_time_picker_widgets(self):
                   self.admin_login(username='super',  password='123')
                   #  Open  a  page  that  has  a  date  and  time  picker  widgets
                   self.selenium.get('%s%s'  %  (self.live_server_url,
                           '/admin_widgets/member/add/'))
                   #  Check  that  the  date  picker  is  hidden
                   self.assertEqual(
                           self.get_css_value('#calendarbox0',  'display'),  'none')
                   #  Click  the  calendar  icon
                   self.selenium.find_element_by_id('calendarlink0').click()
                   #  Check  that  the  date  picker  is  visible
                   self.assertEqual(
                           self.get_css_value('#calendarbox0',  'display'),  'block')

    View Slide

  18. Спасибо
    [email protected]
    @coagulant http://blog.futurecolors.ru/

    View Slide