小编keb*_*bie的帖子

使用 asgi 时,Django 应用程序尚未加载

我正在尝试使用 asgi 而不是 wsgi 来运行我的 django 项目。我已经设置了我的 routing.py 和 asgi.py 如下:

路由.py

from django.conf.urls import url
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.security.websocket import AllowedHostsOriginValidator, 
OriginValidator
from channels.auth import AuthMiddlewareStack

from some.consumers import SomeConsumer


application = ProtocolTypeRouter({
    'websocket': AllowedHostsOriginValidator(
        AuthMiddlewareStack(
            URLRouter(
                [
                    url(r'^some_url/$', SomeConsumer),
                ]
            )
         )
    )
})
Run Code Online (Sandbox Code Playgroud)

asgi.py

import os
from channels.routing import get_default_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings")
application = get_default_application()
Run Code Online (Sandbox Code Playgroud)

现在,正如您所看到的,它是标准设置,并且在默认 django 服务器上运行良好,但是当我尝试与其他一些(daphne 或 uvicorn)一起运行时,它抛出了这个异常。

这是我的 INSTALLED_APPS

INSTALLED_APPS = [
    'channels',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
    'django_jenkins', …
Run Code Online (Sandbox Code Playgroud)

django django-channels asgi

8
推荐指数
3
解决办法
3310
查看次数

使用 Django 和 websocket 进行跨站请求伪造保护

我已使用 Django 通道(v. 2.1.5)在 Django(v. 2.0)驱动的网站上成功创建了一个 websocket。

一切都很好,但我想知道 CSRF 令牌怎么样。如果是 websocket 的话需要吗?文档说它足以用来OriginValidator防止此类线程,但我想确保这一点。我的意思是,CSRF 代币发生了什么?我是否只是通过安全通道发送数据而没有它,后端会自动检查所有内容?如果是这样那为什么呢?为什么简单的视图不能做到这一点?

我知道这是一个相当悬而未决的问题,但我无法找到任何具体的解释,如果有人有一个我会非常感激。

django csrf django-channels

2
推荐指数
1
解决办法
762
查看次数

标签 统计

django ×2

django-channels ×2

asgi ×1

csrf ×1