Що нового нас чекає в Django 1.7

    У даному пості представлений огляд нововведень і особливостей популярного серед Python розробників фреймворка Django 1.7. Реліз позиціонується як спільнотою, так і основними розробниками — як найбільш значимий реліз, з моменту виходу в світ Django 1.0.
 
 image
 
 
 

Нововведення у версії 1.7

Припинення підтримки Python 2.6. Тепер підтримується версія Python 2.7 і вище. Заявлена ​​підтримка Python 3.4.
Додана нативная підтримка міграцій безпосередньо в сам фреймворк. Можна подякувати за це автора популярної батарейки South — Andrew Godwin-а .
 
Команда syncdb обьявлена ​​як застаріла, і швидше за все буде видалена надалі. Поки ще працює так само, як і колись.
Фікстури initial_data паче не инициализируются за замовчуванням для додатків з міграціями. Пропонується скористатися завантаженням фікстур на рівні самих міграцій.
 
Механізм завантаження програми — був підданий повного рефакторингу. В результаті можна відмовитися від models.py, який раніше ідентифікував додаток і був обов'язковим.
Нові методи підкласів Field . Головна особливість — це обов'язковий метод deconstruct (). На жаль в цьому вина включення міграцій до складу Django. Якщо Ви наслідуєте від стандартних полів і не переважають метод __ init__, то піклуватися Вам про це не доведеться.
 
З'явилася можливість викликів QuerySet-ів безпосередньо з менеджера:
 
class FoodQuerySet(models.QuerySet):
    def pizzas(self):
        return self.filter(kind='pizza')

    def vegetarian(self):
        return self.filter(vegetarian=True)

class Food(models.Model):
    kind = models.CharField(max_length=50)
    vegetarian = models.BooleanField()
    objects = FoodQuerySet.as_manager()

Food.objects.pizzas().vegetarian()

Можливість вказати необхідний менеджер при використанні зв'язування моделей:
 
class Blog(models.Model):
    pass

class Entry(models.Model):
    blog = models.ForeignKey(Blog)

    objects = models.Manager()  # Default Manager
    entries = EntryManager()    # Custom Manager

b = Blog.objects.get(id=1)
b.entry_set(manager='entries').all()

 
Нова система, для перевірки проекту (System check), яка при запуску опеделяет проблеми і підказує що і як необхідно виправити. Для перевірки, використовується нова команда check, що прийшла на заміну застарілої команді validate.
Новий Prefetch для просунутих операцій prefetch_related. Тепер можна налаштувати попередню вибірку використовуючи QuerySet-и.
 
Підтримка поточного часового поясу в панелі адміністратора, при роботі з віджетом дати. Перш використовувався часовий пояс браузера. При розбіжності часу в браузері і на сервері — виводиться візуальна підказка.
 
Курсор баз даних, тепер може використовуватися як контекст менеджера:
 
c = connection.cursor()
try:
    c.execute(...)
finally:
    c.close()

 
Можливість визначення власних типів пошуку , для фільтрації при використанні ORM.
 
from django.db.models import IntegerField
from django.db.models import Transform

class AbsoluteValue(Transform):
    lookup_name = 'abs'

    def as_sql(self, qn, connection):
        lhs, params = qn.compile(self.lhs)
        return "ABS(%s)" % lhs, params

IntegerField.register_lookup(AbsoluteValue)

# Использование
Experiment.objects.filter(change__abs=27)

# В результате получим
# SELECT ... WHERE ABS("experiments"."change") = 27

 
 

Інші цікаві зміни

 
 django.contrib.admin
 
     
  • З'явилася можливість реалізувати власні site_header, site_title, і index_title, без необхідності перевизначення шаблону.
  •  
  • Метод ModelAdmin.get_fields () може бути преопределен, для налаштування значень ModelAdmin.fields.
  •  
  • На додаток до існуючого синтаксису admin.site.register, можна використовувати новий декоратор register () .
  •  
  • Можна задати ModelAdmin.list_display_links = None, для того що б відключити посилання в grid-е
  •  
  • Для котроля кнпокі «Подивитися на сайті», можна визначити свій ModelAdmin.view_on_site .
  •  
  • Можливість вказати сортування для ModelAdmin.list_display , підставляючи дефіс в admin_order_field.
  •  
  • Метод ModelAdmin.get_changeform_initial_data () може бути перевизначений, для зміни даних форми.
  •  
 
 django.contrib.auth
 
     
  • ** kwargs передаються в email_user () , так само передаються і в send_mail () .
  •  
  • декоратор permission_required () може отримувати на вхід список дозволів або ж тільки один дозвіл.
  •  
  • можливо перевизначити новий метод AuthenticationForm.confirm_login_allowed () , для швидкої і легкої настройки політики авторизації.
  •  
  • django.contrib.auth.views.password_reset () приймає необов'язковий параметр html_email_template_name. Параметр використовується для відправки html листів, при скиданні пароля.
  •  
  • доданий метод AbstractBaseUser.get_session_auth_hash () . Якщо для користувача модель успадкована від AbstractBaseUser , то зміна пароля користувача призведе до скидання його застарілих сесссій.
  •  
 
 django.contrib.sites
  
 E-mail
 
     
  • У send_mail () доданий параметр html_message, для відправки повідомлень типу text / html.
  •  
  • SMTP бекенд отримав можливість встановити параметр тайм-ауту .
  •  
 
 Завантаження файлів
 
     
  • долучення атрибут UploadedFile.content_type_extra , який містить додаткові параметри, передані в заголовок типу вмісту при завантаженні файлів.
  •  
  • Нова установка FILE_UPLOAD_DIRECTORY_PERMISSIONS дозволяє задавати права на створювані директорії при завантаженні файлів. Ту ж настройку безпосередньо для файлів, виконує FILE_UPLOAD_PERMISSIONS .
  •  
  • FileField.upload_to тепер є необов'язковим.
  •  
 
 Форми
 
     
  • Textarea тепер включає атрибут max_length, якщо в моделі визначено max_length.
  •  
  • Field.choices дозволяє задати value для порожнього значення. За замовчуванням "-------".
  •  
  • У формах в методі clean () більш не потрібно повертати self.cleaned_data.
  •  
  • З'явилася можливість видалити поля з форми, шляхом установки їх імені в None.
  •  
  • Новий метод add_error () дозволяє задавати помилки для конкретних полів.
  •  
  • Додана можливість задавати і виводити помилки до обмежувачам виду unique, unique_for_date, і unique_together.
  •  
 
 Інтернаціоналізація
 
     
  • Атрибут django.middleware.locale.LocaleMiddleware.response_redirect_class дозволяє налаштувати переадресацію.
  •  
  • LocaleMiddleware зберігає вибрана мова користувачем мову в _language. Отримати доступ, можна використовуючи константу LANGUAGE_SESSION_KEY.
  •  
  • Тег blocktrans видаляє атрибут trimmed. Дана опція видаляє символи нового рядка з початку і до кінця, обьеденить їх через пропуск. Що зручно для генерації файлів локалі.
  •  
  • Покращено makemessages .
  •  
  • Були додані наступні мовні константи: LANGUAGE_COOKIE_AGE, LANGUAGE_COOKIE_DOMAIN and LANGUAGE_COOKIE_PATH.
  •  
 
 Команди управління
 
     
  • Можливість відключити кольоровий висновок в консоль.
  •  
  • Додана можливість дампа даних з первинними ключами при серіалізациі.
  •  
  • Немає необхідності вказувати назву кеш таблиці при використанні createcachetable. Тепер Django це робить сама, з урахуванням налаштування кеша в налаштуваннях проекту.
  •  
  • Команда runserver була покращена. Тепер при встановленому pyinotify, швидкість релоад стала вище, і менше споживає батарею на ноута. Так само сервер релоад при використанні команди compilemessages. Виводяться в консоль всі запити до статики, які перш фільтрувалися.
  •  
 
 Моделі
 
     
  • Новий метод QuerySet.update_or_create () .
  •  
  • Нова Meta опція default_permissions , яка дозволяє налаштувати операції створення / зміни / видалення.
  •  
  • Виявлення OneToOneField при спадкуванні в абстрактних класах.
  •  
  • Додана можливість використовувати None як значення запиту при використанні iexact .
  •  
  • Можливість використання один список в index_together при вказівці одного набору полів (НЕ список в списках).
  •  
  • Числові поля тепер перевіряються залежно від БД. Раніше могло призводити до помилки.
  •  
 
 Запити та відповіді
 
     
  • Новий атрибут HttpRequest.scheme визначає схему запиту (http або https).
  •  
  • redirect () підтримує відносний URL.
  •  
  • Новий підклас HttpResponse — JsonResponse .
  •  
 Утиліти
  
Даний пост є вільним інтерпретування офіційній документації знаходиться в стадії розробки, і носить виключно ознайомлювальний характер.
У нього включені найбільш цікаві речі з погляду автора поста. Для більш докладного і детального ознайомлення, можна
перейти на сторінку документації .
  

    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.