【发布时间】:2019-10-01 15:56:50
【问题描述】:
我正在创建一个群组应用,我希望它只是邀请,但我想知道是否有更好的方法来做到这一点。此设置工作正常,但如果有人看到我可能遇到的任何问题,请告诉我。我已经包含了与邀请相关的模型和视图,这应该可以让您很好地了解我在这里的思考过程。
models.py
Account = get_user_model()
class FriendGroup(models.Model):
owner = models.ForeignKey(
Account, on_delete=models.SET_NULL, related_name="group_owner", null=True)
name = models.CharField(max_length=50)
description = models.TextField(blank=True, null=True)
administrators = models.ManyToManyField(
Account, related_name="group_admin")
members = models.ManyToManyField(Account, related_name="group_member")
thumbnail = models.ImageField(upload_to='images/groups/', blank=True)
image_lg = models.ImageField(upload_to='images/groups/', blank=True)
date_created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class GroupInvite(models.Model):
group = models.ForeignKey(
FriendGroup, on_delete=models.CASCADE, related_name="invite")
sender = models.ForeignKey(
Account, on_delete=models.CASCADE, related_name="sent_by")
invitee = models.ForeignKey(
Account, on_delete=models.CASCADE, related_name="invitee")
def __str__(self):
return "Join " + self.group.name
views.py
class SendGroupInvitesView(APIView):
def post(self, request, pk, format=None):
group = FriendGroup.objects.filter(id=pk)
invitees = request.data.get('invitees')
if group.exists():
if request.user in group[0].members.all():
if invitees:
for invitee in invitees:
account = Account.objects.filter(id=invitee)
if account.exists():
invite = GroupInvite.objects.create(
group=group[0], sender=request.user, invitee=account[0])
invite.save()
return Response({'success': 'Invites sent.'}, status=status.HTTP_201_CREATED)
return Response({'error': 'You must invite at least one friend.'}, status=status.HTTP_400_BAD_REQUEST)
return Response({'error': 'Group does not exist.'}, status=status.HTTP_400_BAD_REQUEST)
class AcceptGroupInviteView(APIView):
def post(self, request, pk, format=None):
invite = GroupInvite.objects.filter(id=pk, invitee=request.user)
if invite.exists():
invite = invite[0]
group = invite.group
group.members.add(request.user)
group.save()
invite.delete()
return Response({'success': 'Joined group.'}, status=status.HTTP_201_CREATED)
return Response({'error': 'Invite does not exist.'}, status=status.HTTP_400_BAD_REQUEST)
class DeleteGroupInviteView(APIView):
def post(self, request, pk, format=None):
invite = GroupInvite.objects.filter(id=pk)
if invite.exists():
if invite[0].invitee == request.user or request.user in invite[0].group.members.all():
invite = invite[0]
invite.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
return Response({'error': 'You are not authorized to delete this invite.'}, status=status.HTTP_401_UNAUTHORIZED)
return Response({'error': 'Invite does not exist.'}, status=status.HTTP_400_BAD_REQUEST)
我知道我的代码可能看起来有点草率,可能会让经理来清理一下。
【问题讨论】:
标签: python django server django-rest-framework backend