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

April 05, 2012
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Структура проекта До 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
  2. Новый 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)
  3. Шаблон проекта 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=<url>  <project>
  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
  5. Шаблоны • {%  elif  %} • {%  static  %} •

    |truncatechars • Key-value аргументы для тегов • assignment-теги • Контекстные пометки для перевода
  6. 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  }}.
  7. Контекстные пометки для перевода {%  trans  "May"  context  "month  name"

     %} {%  trans  "May"  context  "verb"  %} {%  blocktrans  with  name=user.username  context  "greeting"  %}        Hi  {{  name  }} {%  endblocktrans  %}
  8. Тестирование • 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)
  9. Браузерное тестирование 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')