我正在考虑使用django-notifications和Web Sockets向iOS/Android和Web应用程序发送实时通知.所以我可能会使用Django频道.
我可以使用Django频道实时跟踪用户的在线状态吗?如果是,那么如何在不经常轮询服务器的情况下实现这一目标?
我正在寻找最佳实践,因为我找不到任何合适的解决方案.
更新:
我到目前为止尝试的是以下方法:使用Django Channels,我实现了一个WebSocket使用者,在连接时将用户状态设置为'online',而当套接字断开时,用户状态将被设置为'offline'.最初我想要包括'away'状态,但我的方法无法提供这种信息.此外,当用户使用来自多个设备的应用程序时,我的实现将无法正常工作,因为连接可以在设备上关闭,但仍然在另一个设备上打开; 'offline'即使用户有另一个打开的连接,状态也将设置为.
class MyConsumer(AsyncConsumer):
async def websocket_connect(self, event):
# Called when a new websocket connection is established
print("connected", event)
user = self.scope['user']
self.update_user_status(user, 'online')
async def websocket_receive(self, event):
# Called when a message is received from the websocket
# Method NOT used
print("received", event)
async def websocket_disconnect(self, event):
# Called when a websocket is disconnected
print("disconnected", event)
user = self.scope['user'] …Run Code Online (Sandbox Code Playgroud) 我正在通过MySQL Workbench构建我的第一个数据库.在表中,我需要存储time包含分钟和秒的属性.在这方面,我想使用TIME数据类型.该类型所需的参数是什么TIME(...)?
我想知道是否有可能使用action装饰器定义额外的参数:
class UserViewSet(viewsets.ModelViewSet):
"""
A viewset that provides the standard actions
"""
queryset = User.objects.all()
serializer_class = UserSerializer
@action(methods=['post'], detail=True)
def follow(self, request, pk=None):
user = self.get_object()
target_user = ???
Follow.objects.create(user=user, target=target_user)
return Response(status=status.HTTP_204_NO_CONTENT)
Run Code Online (Sandbox Code Playgroud)
我要实现的是匹配以下路径: api/users/{id}/follow/{target_id}
该follow操作将用于让ID为的用户id跟随另一个ID为的用户target_id。
更新:
由于似乎无法传递额外的参数,因此现在我将数据作为要遵循的用户ID列表发布:
用于验证数据的串行器:
class FollowSerializer(serializers.ModelSerializer):
user_ids = serializers.ListField(child=serializers.IntegerField(min_value=1), required=False, help_text='User target IDs')
Run Code Online (Sandbox Code Playgroud)
那个行动:
@action(detail=True, methods=['post'])
def follow(self, request, pk=None):
user = self.get_object()
serializer = FollowSerializer(data=request.data)
if serializer.is_valid():
serializer.data['user_ids']
for user_id in user_ids:
target_user = …Run Code Online (Sandbox Code Playgroud) 我在我的Bluemix帐户上创建了一个额外的"空间".我仔细检查了我的Bluemix仪表板,但我无法删除该空间.现在,我怎么能删除它?
我正在使用 AWS MediaLive 从移动设备实时推送视频内容。然后我使用 AWS MediaPackage 来消化输入,即来自 AWS MediaLive 的输出。使用 AWS MediaLive,我创建了源终端节点,让用户/观众观看直播。
现在,我不知道如何将实时流媒体视频存储到 S3 并通过 CDN 分发它,以便即使流媒体结束也能观看视频。AWS 提供的东西是开箱即用的吗?
更新:
我定义了一个ArchiveGroupSettings带有输出 URL 的 S3 存储桶。现在 MediaLive 创建.ts文件并将它们发送到存储桶,问题是.ts文件不包含.m3u8播放列表文件。
我应该使用其他 AWS 媒体服务吗?我需要的只是一种在实时流完成后流式传输视频的方法,即将 HLS 视频保存到 S3 或类似的,然后通过像 CloudFront 这样的 CDN 分发它。
注意:我使用的是 AWS MediaLive 和 MediaPackage API。
尽管标题列是通过使用以下查询添加为索引的:
ALTER TABLE Recipe ADD INDEX Title_idx (Title)
Run Code Online (Sandbox Code Playgroud)
MySQL 不使用该索引来执行此查询:
SELECT * FROM Recipe
WHERE Title LIKE '%cake%';
Run Code Online (Sandbox Code Playgroud)
我使用了EXPLAIN关键字,关键字段是NULL。
怎么解决呢?我必须改进该查询。
我已经使用 Redis 在我的 Django 项目上设置了 Celery。计划任务运行没有问题。使用delay(). 执行停止,就像被阻塞在kombu.utils.retry_over_time.
我检查了一下,Redis 已启动并正在运行。我真的不知道如何调试这个问题。
这是一些软件包版本
Django==2.1.2
celery==4.2.1
django-celery-beat==1.4.0
django-celery-results==1.0.4
redis==3.2.0
kombu==4.4.0
Run Code Online (Sandbox Code Playgroud)
设置
CELERY_REDIS_HOST = 'localhost'
CELERY_REDIS_PORT = 6379
CELERY_REDIS_DB = 1 # # Redis DB number, if not provided the default will be 0
CELERY_REDIS_PASSWORD = ''
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
CELERY_BROKER_URL = 'redis://{host}:{port}/{db}'.format(host=CELERY_REDIS_HOST, port=CELERY_REDIS_PORT, db=CELERY_REDIS_DB)
CELERY_RESULT_BACKEND = 'django-db'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json' # Result serialization format
CELERY_TASK_SERIALIZER = 'json' # String identifying the serializer to be used
CELERY_BROKER_TRANSPORT_OPTIONS = …Run Code Online (Sandbox Code Playgroud) 我已经在AWS Elastic Beanstalk上部署了Django 2应用程序,并且我正在尝试配置Celery,以便在同一台计算机上执行异步任务。
我的文件:
02_packages.config
files:
"/usr/local/share/pycurl-7.43.0.tar.gz" :
mode: "000644"
owner: root
group: root
source: https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz
packages:
yum:
python34-devel: []
libcurl-devel: []
commands:
01_download_pip3:
# run this before PIP installs requirements as it needs to be compiled with OpenSSL
command: 'curl -O https://bootstrap.pypa.io/get-pip.py'
02_install_pip3:
# run this before PIP installs requirements as it needs to be compiled with OpenSSL
command: 'python3 get-pip.py'
container_commands:
03_pycurl_reinstall:
# run this before PIP installs requirements as it needs to be compiled with OpenSSL …Run Code Online (Sandbox Code Playgroud) 我想知道Django项目的结构是否有最佳实践.特别是,您在哪里找到项目的virtualenv文件夹?
您认为以下解决方案更好吗?
/myproject
/myenv
manage.py
/mysite
settings.py
urls.py
wsgi.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
或者你认为拥有一个包含所有环境的文件夹会更好,例如在主目录中:
/virtualenvs
/myproject1_env
/myproject2_env
...
/myprojectN_env
Run Code Online (Sandbox Code Playgroud)