Почему эта ошибка происходит?
Это происходит из-за схемы SessionAuthentication
по умолчанию, используемой DRF. DRF SessionAuthentication
использует среду сеансов Django для аутентификации, которая требует проверки CSRF.
Если вы не определяете какой-либо authentication_classes
в вашем представлении / просмотре, DRF использует эти классы проверки подлинности в качестве значения по умолчанию.
'DEFAULT_AUTHENTICATION_CLASSES'= (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication'
),
Поскольку DRF необходимо поддерживать как сеанс, так и несинхронная аутентификация на одни и те же представления, она обеспечивает проверку CSRF только для аутентифицированных пользователей. Это означает, что только аутентифицированные запросы требуют токенов CSRF, а анонимные запросы могут быть отправлены без токенов CSRF.
Если вы используете API стиля AJAX с SessionAuthentication, вам нужно будет указать действительный токен CSRF для любого «небезопасные» вызовы HTTP-метода, например PUT, PATCH, POST or DELETE
.
Что делать?
Теперь, чтобы отключить проверку csrf, вы можете создать собственный класс проверки подлинности CsrfExemptSessionAuthentication
, который простирается от класса по умолчанию SessionAuthentication
. В этом классе аутентификации мы переопределим проверку enforce_csrf()
, которая происходила внутри фактического SessionAuthentication
.
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
class CsrfExemptSessionAuthentication(SessionAuthentication):
def enforce_csrf(self, request):
return # To not perform the csrf check previously happening
В вашем представлении вы можете определить authentication_classes
следующим образом:
authentication_classes = (CsrfExemptSessionAuthentication, BasicAuthentication)
Это должно обрабатывать ошибку csrf.
Загрузите libgcrypt11_1.5.3 из: https://launchpad.net/ubuntu/+archive/primary/+files/libgcrypt11_1.5.3-2ubuntu4.2_amd64.deb
Установить lib с помощью dpkg
sudo dpkg -i libgcrypt11_1.5.3-2ubuntu4.2_amd64.deb
Установить StarUML с помощью dpkg
sudo dpkg -i StarUML-v2.7.0-64-bit.deb
Скачать
wget http://security.ubuntu.com/ubuntu/pool/main/libg/libgcrypt11/libgcrypt11_1.5.3-2ubuntu4_amd64.deb
Установить lib с помощью dpkg
sudo dpkg -i libgcrypt11_1.5.3-2ubuntu4_amd64.deb
Установить StarUML с помощью dpkg
sudo dpkg -i StarUML-v2.8.0-64-bit.deb
Добавление в эту тему для Ubuntu 18.04:
Загрузите libgcrypt11 по предоставленной ссылке:
https://launchpad.net/ubuntu/+ архив / основной / + файлы / libgcrypt11_1.5.3-2ubuntu4.2_amd64.deb
Теперь установите его с помощью команды:
sudo dpkg -i libgcrypt11_1.5.3-2ubuntu4.2_amd64.deb
Теперь нам нужно установить еще одну зависимость, libcurl3. Запустите команду:
sudo apt install libcurl3
Теперь продолжите установку StarUML:
sudo dpkg -i StarUML-v2.8.1-64-bit.deb
Обратите внимание, что имя файла будет меняться в зависимости от версии StarUML. [ +1115]
Вот и все. Сработал как шарм для меня.
У меня была эта ошибка при попытке установить программу Start UML перед установкой пакета libgcrypt11_1.5.3-2ubuntu4_amd64.deb. Если вы выполните описанные выше шаги, пожалуйста, запустите:
sudo apt-get -f install
со мной, запустите
Мне пришлось выполнить следующие шаги:
Установка файла deb с помощью dpkg:
sudo dpkg -i StarUML-v2.8.0-64-bit.deb
, а затем команда sudo apt-get install -f
.
Дополнительно вы должны установить libpango-1.0-0
sudo apt install libpango-1.0-0