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, новую структуру проекта, шаблоны и многое другое.

Avatar for Moscow Python Meetup

Moscow Python Meetup PRO

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