Django - Урок 028. Подключение возможности загружать изображения для пользователей без статуса персонала в CKEditor

Django, ckeditor

В большей части сайта я использую самописный WYSIWYG редактор, поэтому он не такой продвинутый как хотелось бы. А вот для написания статей на сайте, используется CKEditor , очень мощный и хороший редактор. Нюанс в том, что написание статей доступно для всех зарегистрированных пользователей сайта. Но по умолчанию CKEditor позволяет загружать изображения только пользователям со статусом персонала.

Для всех других пользователей будет открываться либо страничка с ошибкой, либо главная страница сайта вместо файлового менеджера для поиска изображений или загруженного изображения.

Немного полистав документацию, удалось исправить эту проблему. И честно говоря смотрится решение довольно странно, хотя и предлагается в официальной документации на редактор.

Суть в том, что обычно для модуля загрузки изображений urls подключаются следующим образом.

urlpatterns = [
    url(r'^ckeditor/', include('ckeditor_uploader.urls')),
]

А если заглянуть в исходники ckeditor , то можно увидеть следующее

urlpatterns = patterns(
    '',
    url(r'^upload/', staff_member_required(views.upload), name='ckeditor_upload'),
    url(r'^browse/', never_cache(staff_member_required(views.browse)), name='ckeditor_browse'),
)

Так вот функция staff_member_required как вы уже поняли, ограничивает доступ пользователей к данному функционалу. То есть только персонал может загружать изображения и искать изображения через файловый браузер на сайте.

И что нам предлагает официальная документация вместо какого-нибудь флага настроек?
Правильно, записать напрямую пути к вьюшкам, то есть таким образом.

urlpatterns = [
    url(r'^upload/', login_required(upload), name='ckeditor_upload'),
    url(r'^browse/', login_required(never_cache(browse)), name='ckeditor_browse'),
]

То есть выкидываем staff_member_required и заменяем его на login_required, чтобы дать доступ всем пользователям сайта, кроме неавторизованных.

На мой взгляд, довольно странное решение, когда это можно было сделать с помощью переменной в настройках. Это слегка неудобно и нелогично.

Для Django рекомендую VDS-сервера хостера Timeweb .

Комментарии

Комментарии

Только авторизованные пользователи могут оставлять комментарии.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
22 февраля 2018 г. 18:58
Oleg_kgd

C++ - Тест 001. Первая программа и типы данных

  • Результат 66 баллов
  • Очки рейтинга -1
21 февраля 2018 г. 19:18
sentinel

Qt - Тест 001. Сигналы и слоты

  • Результат 78 баллов
  • Очки рейтинга 2
21 февраля 2018 г. 11:32
barilla

C++ - Тест 006. Перечисления

  • Результат 0 баллов
  • Очки рейтинга -10
Последние комментарии
22 февраля 2018 г. 16:42
soz7557

Qt/C++ - Урок 029. Изображение в базе данных в Qt – Сохранение и Восстановление

Hi, could you please show how to delete file from image Blob?  also if the same image exist in Blob then don't over write..

21 февраля 2018 г. 8:37
EVILEG

Qt/C++ - Урок 027. Полиморфизм в Qt на примере геометрических фигур в QGraphicsScene

Добрый день! 1) Эллипс можно реализовать так void Ellipse::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){ painter->setPen(QPen(...

20 февраля 2018 г. 22:10
Log159

Qt/C++ - Урок 027. Полиморфизм в Qt на примере геометрических фигур в QGraphicsScene

Здравствуйте! В программировании новичок и есть пара вопросов. Буду очень благодарен за ответ. Не совсем понимаю как: 1) реализовать подобным образом рисование эллипса(конкре...

18 февраля 2018 г. 14:42
EVILEG

QML - Урок 019. Navigation Drawer в Qt Qml Android

Да, теперь представляю, как то работает. Согласен, ваша правка определённо к месту здесь.

Сейчас обсуждают на форуме
21 февраля 2018 г. 22:19
vitaliy_antipov

Проблема с ComboBox

Спасибо за ответы, есть над чем подумать

21 февраля 2018 г. 13:26
sol11

Qtableviev после сортировки

Спасибо, всё заработало :) Единственное вот тут row на id поменял и всё круто :)) if(id == -1){ model->insertRow(model->rowCount(QModelIndex())); map...

20 февраля 2018 г. 13:18
alex_lip

Разбить один qml файл на несколько составляющих

Да спасибо. Просто после необходимости специфичных названий для файла - стараюсь обращать внимание на любую мелочь.

20 февраля 2018 г. 8:13
EVILEG

Передача файлов в django минуя временные папки django и nginx

Тогда я даже и не знаю, прошерстил документацию, но там нет информармации о возможности отключения сохранения временных файлов. Как я понял временные файлы используются, когда тело запро...

18 февраля 2018 г. 12:34
EVILEG

QGraphicsView

Добрый день!QGraphicsView - это виджет, а значит, что в качестве парента для него выступает QWidget, а не QObject.То есть из ошибок, которые сразу бросаются в глаза в этом коде, здесь прису...