проект django, полученный из примера django python-socketio, не может серверировать другие URL-адреса (по крайней мере, в django 1.11)

Поиграв с python-socketios django_example и увидев, что он отлично работает, я создал новый проект django, настроил его точно так же, как в примере, скопировал пример приложения в проект (вместе с переопределением команды управления сервером запуска). Все работало нормально, и я смог внести несколько изменений, чтобы вы могли установить псевдоним, кое-что в Redis для поиска псевдонима по sid, а также смог поддерживать отправку личных сообщений на ник. Все по-прежнему работало отлично.

Я решил, что следующим логическим шагом будет вместо того, чтобы вручную устанавливать псевдоним, требовать от пользователя входа в систему, отображать свое имя пользователя как var в блоке скрипта в шаблоне (я переместил scripts/index.html в templates/index.html) и автоматически иметь javascript автоматически генерировать мое пользовательское событие set_nick с именем пользователя при подключении.

Я определил LOGIN_URL = '/accounts/login' в settings.py, включил 'django.contrib.auth.urls' в свой urls.py и обернул представление индекса @login_required.

Только тогда я заметил, что независимо от того, какой URL-адрес вы запрашиваете, вы всегда получаете представление индекса приложений чата - нет перенаправления страницы входа, «/admin/» игнорируется и т. д.

РЕДАКТИРОВАНИЕ Решено. См. мой ответ ниже.


person ckot    schedule 04.12.2018    source источник
comment
Вы уверены, что еще не вошли в систему? Вы можете проверить сайт в режиме инкогнито?   -  person ruddra    schedule 04.12.2018
comment
@ruddra хм. ты прав. Кроме того, одна странная вещь с расширенной сокетами командой runserver заключается в том, что она, похоже, не автоматически обнаруживает/не перезагружает изменения в коде сервера, и вам нужно дважды нажать ctrl-C, чтобы полностью убить ее. теперь похоже, что мне просто нужно исправить неработающий шаблон login.html   -  person ckot    schedule 04.12.2018
comment
Пожалуйста, переместите свое решение в отдельный ответ, спасибо.   -  person Cœur    schedule 31.12.2018


Ответы (1)


Я заметил, что urls.py, который я слепо скопировал из примера, выглядел так:

url(r'', include('socketio_app.urls')),
url(r'^admin/', admin.site.urls), 

и r'' был виновником (соответствует всему). Изменение этого на:

url(r'^/', include('socketio_app.urls)),
url(r'^admin/', admin.site.urls),

Однако я использую Django == 1.11. Я полагаю, что Django 2 склонен предлагать использовать path (или другую функцию с аналогичным названием), а не использовать url. Однако я не верю, что семантика url отличается в Django 2, поэтому вероятно это проблема и для пользователей Django 2.

person ckot    schedule 13.01.2019