来自 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-socketio
s 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 用户。
玩过 python-socketio
s 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 用户。