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

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

description

Краткий обзор новинок в Django 1.4

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

Page 1: Что нового в Django 1.4

Что нового в Django 1.4Илья Барышев

Moscow Django Meetup #2

Page 2: Что нового в Django 1.4

Чуточку статистики

• ровно 1 год разработки

• ~1900 коммитов

• 28 core committers

• 524 человека в AUTHORS.txt

Page 3: Что нового в Django 1.4

Версии 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*

Page 4: Что нового в Django 1.4

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

Page 5: Что нового в Django 1.4

ORM

• bulk_create()

• select_for_update()

• prefetch_related()

Page 6: Что нового в Django 1.4

Структура проектаДо 1.4 С 1.4

mysite/        __init__.py        manage.py        settings.py        urls.py        myapp/                __init__.py                models.py

manage.pymysite/        __init__.py        settings.py        urls.py        myapp/                __init__.py                models.py

Page 7: Что нового в Django 1.4

Новый manage.py

#!/usr/bin/env  pythonimport  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)

Page 8: Что нового в Django 1.4

Шаблон проекта

project_name/        fixtures/        public/        static/        templates/        __init__.py__        __local_settings.py        local_settings.py        settings.py        urls.py          wsgi.py.gitignoremanage.pyrequirements.txt

http://bit.ly/django_project_template

django-­‐admin.py  startproject  -­‐-­‐template=<url>  <project>

Page 9: Что нового в Django 1.4

Админка

• Пользовательские фильтры• Множественная сортировка• Новые методы 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

Page 10: Что нового в Django 1.4

Шаблоны

• {%  elif  %}

• {%  static  %}

• |truncatechars

• Key-value аргументы для тегов

• assignment-теги

• Контекстные пометки для перевода

Page 11: Что нового в Django 1.4

Assignment-теги

@register.assignment_tagdef  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  }}.

Page 12: Что нового в Django 1.4

Контекстные пометки для перевода

{%  trans  "May"  context  "month  name"  %}{%  trans  "May"  context  "verb"  %}{%  blocktrans  with  name=user.username  context  "greeting"  %}        Hi  {{  name  }}{%  endblocktrans  %}

Page 13: Что нового в Django 1.4

URL i18n

Page 14: Что нового в Django 1.4

Безопасность

• Новый механизм хэширования паролей

• Защита от кликджекинга (clickjacking)

• Улучшения в защите от CSRF- и XSS-атак

Page 15: Что нового в Django 1.4

Криптографическая подпись

• Низкоуровневое API (Signer)

• Бэкенд сессий на подписанных куках• Новый FormWizard на CBV

Page 16: Что нового в Django 1.4

Тестирование

• 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)

Page 17: Что нового в Django 1.4

Браузерное тестирование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')