小编Jag*_*u T的帖子

Django Cache cache.set不存储数据

当我跑python manage.py shell,然后:

from django.core.cache import cache
cache.set("stack","overflow",3000)
print cache.get("stack")

(output: ) None
Run Code Online (Sandbox Code Playgroud)

我尝试重启memcache,这就是我的设置:

CACHES = { 
  'default' : { 
     'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 
     'LOCATION' : '127.0.0.1:11211',
  }
}
Run Code Online (Sandbox Code Playgroud)

django memcached caching

17
推荐指数
1
解决办法
7079
查看次数

使用协议升级在nginx反向代理后面运行daphne始终路由到http而不是websocket

我正在尝试在Nginx反向代理服务器后面部署django通道支持的通知应用程序,以仅为websocket通信提供服务,同时让Nginx + uWSGI设置为django应用程序提供服务.

该应用程序在我的本地机器无缝工作时无论是运行python manage.py runserver --noasgi+ daphne -p 8000 myproject.asgi:applicationpython manage.py runserverdaphne内部处理所有的请求.

问题:

所有websocket请求都被路由到http协议类型而不是websocket协议类型,并返回WebSocket connection to 'ws://ip_address/ws/' failed: Error during WebSocket handshake: Unexpected response code: 404

已安装的软件包:

Django==2.0.3
channels==2.0.2
channels-redis==2.1.1
daphne==2.1.0
asgiref==2.3.0
Twisted==17.9.0
aioredis==1.0.0
autobahn==18.4.1
Run Code Online (Sandbox Code Playgroud)

环境:

Ubuntu - 16.04
Nginx - 1.12.0
Run Code Online (Sandbox Code Playgroud)

用于升级请求的Nginx配置:

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

# the upstream component nginx needs to connect to websocket requests
upstream websocket {
    server …
Run Code Online (Sandbox Code Playgroud)

python django nginx websocket django-channels

6
推荐指数
1
解决办法
599
查看次数

如何使用常用函数处理由多个模型发出的Django Singals

我想编写一个通用函数来处理Django为多个模型发出的post_save信号.

models.py

Class FirstModel(models.Model):
    pass

Class AnotherModel(models.Model):
    pass

Class YetAnotherModel(models.Model):
    pass
Run Code Online (Sandbox Code Playgroud)

对于我的models.py中的一些模型(FirstModel,AnotherModel),我需要编写一个可以在保存后执行一些常见操作的函数.

AFAIK,我可以编写两个处理函数来接收发出的信号并执行常见操作.

signals.py

@receiver(post_save, sender=FirstModel)
def first_model_post_save_handler(sender, **kwargs):
    pass

@receiver(post_save, sender=AnotherModel)
def another_model_post_save_handler(sender, **kwargs):
    pass
Run Code Online (Sandbox Code Playgroud)

但是我有兴趣了解任何更好的解决方案,使其像配置一样.

configuration.py

MODELS_TO_BE_POST_SAVE_HANDLED = ['FirstModel', 'AnotherModel']
Run Code Online (Sandbox Code Playgroud)

singals.py

@receiver(post_save, sender=MODELS_TO_BE_POST_SAVE_HANDLED)
def first_model_post_save_handler(sender, **kwargs):
    pass
Run Code Online (Sandbox Code Playgroud)

提前致谢 :)

django django-signals

5
推荐指数
1
解决办法
746
查看次数