Задать вопрос
@Mihail_Tropin
C++ и Python = my love

Ошибка при запуске сервера Django. Что делать?

Выпадает ошибка при запуске сервера Django. Вроде пишет, что ошибка в кодировке, но я не знаю как её исправить.
System check identified no issues (0 silenced).
June 06, 2019 - 17:33:13
Django version 2.2.2, using settings 'blogglav.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "c:\python37-32\Lib\threading.py", line 917, in _bootstrap_inner
    self.run()
  File "c:\python37-32\Lib\threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "D:\CODE\py-ru\Django\env\lib\site-packages\django\utils\autoreload.py", line 54, in wrapper
    fn(*args, **kwargs)
  File "D:\CODE\py-ru\Django\env\lib\site-packages\django\core\management\commands\runserver.py", line 139, in inner_run
    ipv6=self.use_ipv6, threading=threading, server_cls=self.server_cls)
  File "D:\CODE\py-ru\Django\env\lib\site-packages\django\core\servers\basehttp.py", line 203, in run
    httpd = httpd_cls(server_address, WSGIRequestHandler, ipv6=ipv6)
  File "D:\CODE\py-ru\Django\env\lib\site-packages\django\core\servers\basehttp.py", line 67, in __init__
    super().__init__(*args, **kwargs)
  File "c:\python37-32\Lib\socketserver.py", line 452, in __init__
    self.server_bind()
  File "c:\python37-32\Lib\wsgiref\simple_server.py", line 50, in server_bind
    HTTPServer.server_bind(self)
  File "c:\python37-32\Lib\http\server.py", line 139, in server_bind
    self.server_name = socket.getfqdn(host)
  File "c:\python37-32\Lib\socket.py", line 676, in getfqdn
    hostname, aliases, ipaddrs = gethostbyaddr(name)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcf in position 5: invalid continuation byte
  • Вопрос задан
  • 8712 просмотров
Подписаться 2 Простой 2 комментария
Решения вопроса 1
deepblack
@deepblack Куратор тега Django
Имя хоста написано кириллицей и Python 3.4 или старее?
Windows: socket.gethostbyaddr(name) fails for non-ASCII hostname
bugs.python.org/issue26227

  • Обновить Python
  • Переименовать хост
  • Либо запускать Django передав ему ip адрес вместо имени хоста python manage.py runserver 127.0.0.1:8000
UPD:

я попробовал воспроизвести подобную ошибку в среде Win 10 (в VirtualBox) и у меня получилось только в случае
если в файле hosts присутствует алиас с кириллицей и локаль Windows русская.
spoiler
5cfb3a55d8bd0793644215.png5cfb39ec9a939231168766.png

Если удалить русский, оставив только английский (на русском только интерфейс системы), то всё ок.

Так-же не удалось воспроизвести ошибку если при запуске указывать ip хоста как 127.0.0.2
python manage.py runserver 127.0.0.2:8080
При условии, что в hosts нет алиаса с кириллицей для него.

На чистой системе (установлены только Python 3.7.2 и Pycharm Community, русская локаль) подобной ошибки нет.

Заглянул в исходники socket.py и socketmodule.c
Скорее всего данная особенность связаны с этой частью исходного кода Python на C, а именно PyUnicode_DecodeFSDefault
#ifdef MS_WINDOWS
    /* Issue #26227: gethostbyaddr() returns a string encoded
     * to the ANSI code page */
    return PyUnicode_DecodeFSDefault(name);
#else
    /* Decode from UTF-8 */
    return PyUnicode_FromString(name);
#endif


Далее, если имя хоста не написано кириллицей и в hosts нет кириллицы следует вывод, что с высокой долей вероятности дело в стороннем софте(антивирус, кривой кряк и т.д.).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Proritsatel
У меня решилась проблема с помощью удаления префикса в имени компьютера, хотя в cmd имя отображалось только латиницей, к нему дописывались -ПК, это и было проблемой.
Измените имя компьютера через Мой компьютер-Свойства-Дополнительные параметры Системы - Имя компьютера - Изменить
Ответ написан
Комментировать
@justAnotherCluelessUser
У тебя в последней строчке же написано...
Ты передал куда-то строку в формате не ютф....
Найди эту строку и добавь encode()
encode()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы