그냥 당신이 ResourceBindings 작업하는 경우, 당신은 또한 그렇게 만 사용자가 "소유"라는 객체가이 업데이트를 검색 할 수 있습니다, @의 luke_aus의 답변을 확장하는 해당 사용자 만 볼 수 있어야 우리가 작업을 게시 할 수 있습니다 그것의 자신의 그룹에 사용자 (update
, create
) 등 :
from channels.auth import channel_session_user_from_http,
from channels import Group
@channel_session_user_from_http
def ws_connect(message):
Group("user-%s" % message.user).add(message.reply_channel)
이제 우리는 해당 바인딩을 변경할 수 있습니다 바인딩 된 객체가 속한 경우에만 변경을 발행 있도록 해당 사용자에게 다음과 같은 모델을 가정합니다.
class SomeUserOwnedObject(models.Model):
owner = models.ForeignKey(User)
이제 우리는이 하나의 사용자에 게시 될 것입니다 우리의 사용자 그룹이 모델과 모든 작업 (갱신, 생성 등)를 결합 할 수있다 : 그것에 대해
class SomeUserOwnedObjectBinding(ResourceBinding):
# your binding might look like this:
model = SomeUserOwnedObject
stream = 'someuserownedobject'
serializer_class = SomeUserOwnedObjectSerializer
queryset = SomeUserOwnedObject.objects.all()
# here's the magic to only publish to this user's group
@classmethod
def group_names(cls, instance, action):
# note that this will also override all other model bindings
# like `someuserownedobject-update` `someuserownedobject-create` etc
return ['user-%s' % instance.owner.pk]
의도 된 방법일까요, 아니면 해결 방법일까요? – Shubham
그룹이 없으면 소비자가 아닌 다른 사람이 그것을 할 수 없습니다. message.reply_chanel을 얻으려면 소비자 내에 있어야합니다. 소비자 이외에 사용자를 액세스하려면 그룹을 만들어야합니다. https://channels.readthedocs.io/en/stable/concepts.html#channel-types에서 관련 문서를 확인하십시오. 또한 여기에 제공된 Multichat 및 Livebloe 예제를 모두 확인하십시오. https://github.com/andrewgodwin/channels-examples –
에 동일한 질문이있었습니다. 그것을위한 그룹 만들기는 의도가 아닙니다. 다른 옵션이 없다고 생각합니다. –