Проект django, созданный на примере Python-socketio django, не может обслуживать другие URL-адреса (по крайней мере, в django 1.11)
После игры с python-socketio
s django_example и, увидев, что он работает отлично, я создал новый проект django, настроил его так же, как пример, скопировал приложение-пример в проект (вместе с переопределением команды управления runserver). Все работало нормально, и я смог внести несколько изменений, чтобы вы могли установить ник, некоторые вещи, относящиеся к redis, чтобы найти sid для псевдонима, и мог поддерживать отправку личных сообщений нику. Все все еще работало отлично.
Я подумал, что следующим логическим шагом было, вместо того, чтобы вручную устанавливать ник, требовать от пользователя входа в систему, выставлять свое имя пользователя как переменную в блоке скрипта в шаблоне (я переместил 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/" игнорируется и т. Д.
РЕДАКТИРОВАТЬ Решено - см. Мой ответ ниже.
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.