来自 python-socketio django 示例的 django 项目无法为其他 URL 提供服务(至少在 django 1.11 中)

django project derived from python-socketio django example unable to server other URLs (at least in django 1.11)

玩过 python-socketios django_example 后,看到效果很好,我创建了一个新的 django 项目,像示例一样配置它,将示例应用程序复制到项目中(完成它对 runserver 管理命令的覆盖)。一切正常,我能够进行一些更改,以便您可以设置 nick,一些 redis 东西来查找 sid 的 nick,并且能够支持发送私信给nick。一切仍然很好。

我认为下一个合乎逻辑的步骤是要求用户登录,在模板的脚本块中将他们的用户名作为 var 公开,而不是必须手动设置昵称(我移动了 scripts/index.html templates/index.html),并自动让 javascript 在连接时自动发出带有用户名的自定义 'set_nick' 事件。

我在settings.py中定义了LOGIN_URL = '/accounts/login',在我的urls.py[=31中包含了'django.contrib.auth.urls' =] 并用 @login_required 包装索引视图。

直到那时我才注意到,无论您请求什么 URL,您总是会看到聊天应用程序索引视图 - 没有登录页面重定向,'/admin/' 被忽略,等等。

编辑 已解决 - 请参阅下面的答案。

我注意到我从示例中盲目复制的 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 用户。