dev-панель инструментов Это простая концепция, которую мы придумали много лет назад. Идея состоит в том, чтобы предоставить разработчикам с помощью Toolbelt, полной трюков (ярлыки, переключения, логин – как …), скрытые в интерфейсе. Это такая неотъемлемая часть моего рабочего процесса, которая обычно первым, что я настроил в любом проекте.
В этой записи мы увидим, как настроить его в веб-приложении Django. Мы сосредоточимся на Характеристика, которую все любят : возможность войти в систему как любое пользователя в базе данных (отличное заставка времени). Мы называем это олицвение И вот как это выглядит:
Простой выберите со всеми пользователями в вашей базе данных. Нажмите на один, и вы войдете в систему как ему/нее.
Давайте продолжимся!
1. Создайте приложение Dev
Мы начнем с создания нового приложения, которое мы позвоним дев
. Он проведет всю нашу логику олицетворения, но также является полезным местом для того, чтобы держать руководство по стилю для разработчиков, или некоторые удобные фрагменты, чтобы поделиться командой, или, может быть, просто для размещения временного эксперимента.
python manage.py startapp dev
И не забудьте добавить его в свой Install_apps.
# ./your_app/settings.py INSTALLED_APPS = [ 'dev.apps.DevConfig', # ... ]
2. Вид и URL
Здесь мы будем контролировать, если нынешний пользователь разрешен для того, чтобы осиливать или нет, и выполнить фактическую невероятку. В этом случае мы позволяем любому суперпулярру войти как любой другой пользователь, но вы можете выбрать любые другие критерии, например, только в среде разработки или только если Отладка
это Правда
.
# ./dev/views.py from django.shortcuts import redirect, render, get_object_or_404 from django.contrib.auth import get_user_model, login from django.http import Http404 def impersonate(request, user_id): current_user = request.user if current_user.is_superuser: user = get_object_or_404(get_user_model(), pk=user_id) login(request, user) return redirect('/dev') else: raise Http404("Impersonate is only available for superusers")
# ./dev/urls.py from django.conf.urls import url from . import views app_name = 'dev' urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^impersonate/(?P[0-9]+)/$', views.impersonate, name='impersonate'), ]
# ./your_app/urls.py from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^dev/', include('dev.urls')), url(r'^admin/', admin.site.urls), ]
3. Метка шаблона
Мы хотим повторно использовать нашу панель инструментов во многих шаблонах, поэтому мы извлеким его в свой собственный тег шаблона, используя Включение Django-Tags Функциональность.
Для этого вам нужно создать этот каталог: ./dev/templatetags
и пустой __init__.py
Файл внутри этого.
Внутри нашей папки Templatetags мы создадим следующий файл, который действует как вид нашего нового dev_toolbar
templatetag. Обратите внимание на 2 вещи:
- Сначала мы связываем это с шаблоном
dev/toolbar.html
что мы определим позже. - И второе мы используем
take_context = true
Чтобы иметь возможность доступа к текущему пользователю. Это позволит нам сделать некоторую базовую авторизацию (то есть. Только суперпользователи могут использовать эту функцию). Это избыточно с логикой, которую мы определили ранее, но хорошо иметь сеть безопасности, когда вы обрабатываете деликатные данные.
# ./dev/templatetags/dev_toolbar.py from django.contrib.auth import get_user_model from django import template register = template.Library() @register.inclusion_tag('dev/toolbar.html', takes_context=True) def dev_toolbar(context): request = context['request'] current_user = request.user if current_user.is_superuser: users = get_user_model().objects.all() else: users = [] return {'users': users, 'current_user': current_user}
Файл шаблона содержит свой собственный CSS, JavaScript и HTML. Некоторые простые позиционирование и стиль и бит CSS + JS логика, чтобы сделать бар более тонким.
Мы сделаем поле Select со всеми пользователями в базе данных, и JavaScript позаботится о вызове олицетворящих действий всякий раз, когда мы выбираем другой пользователь, кроме себя. Еще две удобные ссылки на /dev.
и /admin.
Области включены.
Последнее, но не менее важное, я обычно включаю небольшую кнопку закрытия, иногда он пригодится, когда делает работу CSS, вы просто хотите избавиться от бара.
4. Используй это
Наша функция завершена и готова к использованию. Просто загрузите его в любое представление и позвоните в него.
{% load dev_toolbar %} {% dev_toolbar %}
5. Покажите это на панели администратора
Мы собираемся переопределить по умолчанию admin/index.html
Шаблон и включить наши новые dev_toolbar
фрагмент. Для этого нам нужно создать универсальный ./темплиты
каталог в корне проекта и добавить его в Шаблоны ['Dirs']
В настройках проекта.
# ./your_app/settings.py TEMPLATES = [ { 'DIRS': [os.path.join(BASE_DIR, 'templates')], # ... } ]
И теперь создайте новый файл, чтобы переопределить шаблон индекса администратора по умолчанию.
{% extends "admin/index.html" %} {% load dev_toolbar %} {% block sidebar %} {{block.super}} {% dev_toolbar %} {% endblock %}
использованная литература
- Django http404.
- Django включения-теги
- ТАК: Запрос на обработку в тег шаблона включения Django
- Итак: как переопределить и расширить базовые шаблоны админа Django?
Этот пост был первоначально опубликован на ariera.github.io
Оригинал: “https://dev.to/ariera/dev-toolbar-a-web-developers-best-friend”