Django
Материал из Xgu.ru
Django — веб-фреймворк написанный на Python и для использования с Python. Опубликован в 2005 году. Иногда считается аналогом Ruby on Rails в мире Python, что верно только отчасти. Имеет свой ORM и язык шаблонов.
Содержание |
[править] Модель
- Models (англ.) — Модель в Django: введение в вопрос
- Models (англ.) — Модель в Django: Справочная информация
- Making queries (англ.) — Запросы к СУБД средствами Django
[править] Формы
- Working with forms (англ.)
- Creating forms from models (англ.)
- Widgets (англ.) — элементы форм, справочник
[править] Функции-сокращения (shortcut functions)
Функции, которые покрывают несколько уровней MVC, и предназначены для выполнения типовых, наиболее распространённых в Django задач:
- render
- render_to_response
- redirect
- get_object_or_404
- get_list_or_404
Подробнее:
- Django shortcut functions (англ.)
[править] Управление Django-проектом
Управление проектом осуществляется с помощью скриптов
$ django-admin.py <command> [options] $ manage.py <command> [options]
которые фактически являются одним и тем же скриптом, но только с несколькими предустановленными в случае manage.py.
Подробнее:
- django-admin.py and manage.py (англ.)
[править] Полезные Django-приложения
[править] South
Инструмент для безостановочной изменения схемы базы данных Django. Без South (или аналогичного инструмента) такие простейшие задачи как добавление или удаление полей в модели могут стать трудновыполнимыми. С South они происходят абсолютно незаметно.
[править] django-debug-toolbar
Настраиваемые панели с различной отладочной информацией.
[править] django-extensions
Множество маленьких приятных расширений Django,
[править] django-annoying
Ещё одно множество приятных расширений Django. Убирают (уменьшают) вещи, которые в джанго раздражают.
[править] django-chunks
Куски шаблонов, которыми можно управлять через django admin interface.
[править] django-piston
Библиотека для построения программных API на Django.
- django-piston (англ.)
[править] python-social-auth
Библиотека для аутентификации на сайте с помощью аккаунта социальной сети или другого провайдера аутентификации.
Поддерживает не только Django, но и другие фреймворки:
- Django
- Flask
- Pyramid
- Webpy
- Tornado
- python-social-auth
[править] Mezzanine
CMS, построенный на основе Django. Можно сказать, что это Wordpress, сделанный на Django.
- mezzanine (англ.)
[править] Полезные советы
- Используйте относительные пути в конфигурации, не используйте абсолютных
- Используйте тег {% url %} вместо URL-ов в шаблонов
- Используйте django-debug-toolbar
[править] Вопросы и ответы
[править] Как быстро пересоздавать базу для приложения Django?
Во время разработки вам часто приходится менять модель данных. Изменения эти не отражаются автоматически на базе данных. Схема автоматически не меняется.
Есть несколько способов решения этой проблемы:
- Использовать средство для миграции, например, South (более правильный способ);
- Пересоздать базу (более простой способ).
Если данные не нужны, базу можно убить и пересоздать заново:
$ rm myproject/database/database.sqlite3 $ ../bin/python manage.py syncdb --noinput
В этом случае при инициализации базы нужно будет вводить имя и пароль суперпользователя — пересоздание не будет полностью автоматическим.
Для того чтобы облегчить себе задачу, можно сначала сохранить параметры пользователя в файле, а потом использовать этот файл при пересоздании:
$ ../bin/python manage.py dumpdata --indent=2 auth > initial_data.json $ rm myproject/database/database.sqlite3 $ ../bin/python manage.py syncdb --noinput
Имя initial_data.json является специальным, данные из этого файла автоматически считываются при инициализации СУБД.
Другие решения:
- Automatically create an admin user when running Django's ./manage.py syncdb
- How can I perform Django's `syncdb --noinput` with call_command? — похожий вопрос, но используется call_command
[править] Как увидеть backtrace для ajax-вызовов?
Вариантов несколько. Самый простой — использовать следующий декоратор, для функции, которая возвращает результат для ajax-вызова:
import sys import traceback def console_debug(f): def x(*args, **kw): try: ret = f(*args, **kw) except Exception, e: print >> sys.stderr, "ERROR:", str(e) exc_type, exc_value, tb = sys.exc_info() message = "Type: %s\nValue: %s\nTraceback:\n\n%s" % (exc_type, exc_value, "\n".join(traceback.format_tb(tb))) print >> sys.stderr, message raise else: return ret return x @console_debug def my_ajax_function(request): 0/0
Источник: [1].
[править] Как сделать функцию для редактирования и создания объекта одним махом?
@login_required def edit(request, id=None, template_name='article_edit_template.html'): if id: article = get_object_or_404(Article, pk=id) if article.author != request.user: return HttpResponseForbidden() else: article = Article(author=request.user) if request.POST: form = ArticleForm(request.POST, instance=article) if form.is_valid(): form.save() # If the save was successful, redirect to another page redirect_url = reverse(article_save_success) return HttpResponseRedirect(redirect_url) else: form = ArticleForm(instance=article) return render_to_response(template_name, { 'form': form, }, context_instance=RequestContext(request))
И в urls.py при этом:
(r'^article/new/$', views.edit, {}, 'article_new'), (r'^article/edit/(?P<id>\d+)/$', views.edit, {}, 'article_edit'),
Источник:
[править] Дополнительная информация
- Django resources (англ.) — подборка ссылок на различные ресурсы, связанные с Django (дополнительные модули, проекты, документацию)
- Django Cheat Sheet (англ.)
- http://djangosnippets.org/ (англ.) — кусочки кода для Django
- Top 10 tips to a new django developer (англ.) — небольшая подборка советов по Django для начинающих
- Einführung in Django - Django Framework Tutorial (нем.) — введение в Djano
- The Django template language: For Python programmers (англ.) — язык шаблонов в Django
- How to debug in Django, the good way? (англ.) — обсуждение на StackOverflow наилучших способов отладки Django-приложений
- Debugging Django (англ.)
- Python logging in Django (англ.) — логирование в Django
[править] RESTful-взаимодействие в Django
- Tastypie
- http://django-rest-framework.org
[править] Битва Django и Ruby on Rails
- Which should I learn: Django or Rails?
- Ask HN: State of Django vs. Rails?
- Django OR Rails
- Django 1.3 vs Rails 3: A Not So Final Showdown (англ.) — просто очень хорошее сравнение