Что нового в Django 1.4
-
Upload
- -
Category
Technology
-
view
1.833 -
download
5
description
Transcript of Что нового в Django 1.4
Что нового в Django 1.4Илья Барышев
Moscow Django Meetup #2
Чуточку статистики
• ровно 1 год разработки
• ~1900 коммитов
• 28 core committers
• 524 человека в AUTHORS.txt
Версии 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*
Часовые пояса
ORM
• bulk_create()
• select_for_update()
• prefetch_related()
Структура проектаДо 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
Новый 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)
Шаблон проекта
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>
Админка
• Пользовательские фильтры• Множественная сортировка• Новые методы 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
Шаблоны
• {% elif %}
• {% static %}
• |truncatechars
• Key-value аргументы для тегов
• assignment-теги
• Контекстные пометки для перевода
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 }}.
Контекстные пометки для перевода
{% trans "May" context "month name" %}{% trans "May" context "verb" %}{% blocktrans with name=user.username context "greeting" %} Hi {{ name }}{% endblocktrans %}
URL i18n
Безопасность
• Новый механизм хэширования паролей
• Защита от кликджекинга (clickjacking)
• Улучшения в защите от CSRF- и XSS-атак
Криптографическая подпись
• Низкоуровневое API (Signer)
• Бэкенд сессий на подписанных куках• Новый FormWizard на CBV
Тестирование
• 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)
Браузерное тестирование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')
Спасибо
@coagulant http://blog.futurecolors.ru/