views.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. import json
  2. from django.http import HttpResponse
  3. from django.views.decorators.csrf import csrf_exempt
  4. from .form import UserNameForm
  5. from django.contrib.auth.decorators import login_required
  6. from django.shortcuts import render
  7. from django.contrib.auth.models import User
  8. from .models import Friends, FriendRequest
  9. from infrastructure.consumers import knock_knock
  10. DEBUG = True
  11. # 批处理流程
  12. # def more_clean(request, form, html):
  13. # if request.method == 'POST':
  14. # user_login_form = form(request.POST)
  15. # if user_login_form.is_valid():
  16. # # 清洗出合法的数据
  17. # data = user_login_form.cleaned_data
  18. # return data
  19. # elif request.method == 'GET':
  20. # if DEBUG:
  21. # form = form()
  22. # context = {'form': form}
  23. # return render(request, html, context)
  24. #
  25. # else:
  26. # return HttpResponse(status=400)
  27. # 获取好友列表
  28. @csrf_exempt
  29. @login_required(login_url='/account/login/')
  30. def friends_list(request):
  31. if request.method == 'POST':
  32. # 查找双向好友关系
  33. friends = Friends.objects.filter(user__username=request.user.username)
  34. response = []
  35. for friend in friends:
  36. response.append(friend.friend.username)
  37. friends = Friends.objects.filter(friend__username=request.user.username)
  38. for friend in friends:
  39. response.append(friend.user.username)
  40. return HttpResponse(json.dumps(response), status=200)
  41. elif request.method == 'GET':
  42. if DEBUG:
  43. return render(request, 'get_user_list.html')
  44. else:
  45. return HttpResponse(status=400)
  46. # 添加好友(通过ws发送给被请求方信息,返回等待对方回应中)
  47. @csrf_exempt
  48. @login_required(login_url='/account/login/')
  49. def add_friend(request):
  50. if request.method == 'POST':
  51. user_name_form = UserNameForm(request.POST)
  52. if user_name_form.is_valid():
  53. data = user_name_form.cleaned_data
  54. # 查找是否有此人
  55. user = User.objects.filter(username=data['username'])
  56. if user:
  57. # 查找双向好友关系
  58. friend_1 = Friends.objects.filter(user__username=data['username'])
  59. friend_2 = Friends.objects.filter(friend__username=data['username'])
  60. if friend_1 or friend_2:
  61. # 二者已是好友关系
  62. return HttpResponse(status=421)
  63. else:
  64. friend_request = FriendRequest.objects.filter(requester__username=request.user.username)
  65. friend_request = friend_request.filter(receiver__username=data['username'])
  66. if friend_request:
  67. knock_knock(data['username'], 'get_friends_requests')
  68. return HttpResponse(status=200)
  69. else:
  70. new_friend_request = FriendRequest()
  71. new_friend_request.requester = request.user
  72. new_friend_request.receiver = User.objects.filter(username=data['username']).get()
  73. new_friend_request.save()
  74. return HttpResponse(status=200)
  75. else:
  76. return HttpResponse(status=422)
  77. else:
  78. return HttpResponse(status=400)
  79. elif request.method == 'GET':
  80. if DEBUG:
  81. return render(request, 'add_friend.html')
  82. else:
  83. return HttpResponse(status=400)
  84. @csrf_exempt
  85. @login_required(login_url='/account/login/')
  86. def get_friend_request(request):
  87. # 查找目前有哪些请求
  88. friend_requests = FriendRequest.objects.filter(receiver__username=request.user.username)
  89. response = []
  90. for friend_request in friend_requests:
  91. response.append(friend_request.requester.username)
  92. return HttpResponse(json.dumps(response), status=200)
  93. # 由于ws不是很确定,先闲置
  94. # 同意添加好友,
  95. @login_required(login_url='/account/login/')
  96. def accept_friend(request):
  97. if request.method == "POST":
  98. user_name_form = UserNameForm(request.POST)
  99. if user_name_form.is_valid():
  100. data = user_name_form.cleaned_data
  101. friend_requests = FriendRequest.objects.filter(receiver__username=request.user.username)
  102. friend_requests = friend_requests.filter(requester__username=data['username'])
  103. if friend_requests:
  104. Friends.objects.create(user=User.objects.filter(username=data['username']).get(),
  105. friend=User.objects.filter(username=request.user.username).get(),
  106. status=1)
  107. for friend_request in friend_requests:
  108. friend_request.delete()
  109. return HttpResponse(status=200)
  110. else:
  111. return HttpResponse(status=400)
  112. else:
  113. return HttpResponse(status=400)
  114. elif request.method == 'GET':
  115. if DEBUG:
  116. return render(request, 'accept_friend.html')
  117. else:
  118. return HttpResponse(status=400)
  119. # 获取详细好友信息
  120. # @csrf_exempt
  121. # def friendDetail(request, pk):
  122. # data = more_clean(request, UserRequestForm)
  123. # try:
  124. # loginUserid = int(data["username"])
  125. # friendsTemp = friends.objects.get(whomfriend=loginUserid, userid=pk)
  126. #
  127. # except friends.DoesNotExist:
  128. # response = {'result': "do not exist"}
  129. # return HttpResponse(json.dumps(response))
  130. #
  131. # if len(friendsTemp):
  132. # response = {"data": friendsTemp, "result": "好友列表"}
  133. # return HttpResponse(json.dumps(response))
  134. # else:
  135. # response = {"result": "wrong"}
  136. # return HttpResponse(json.dumps(response))
  137. @csrf_exempt
  138. def delete_friend(request):
  139. if request.method == 'POST':
  140. user_name_form = UserNameForm(request.POST)
  141. if user_name_form.is_valid():
  142. data = user_name_form.cleaned_data
  143. try:
  144. temp_friends_1 = Friends.objects.filter(
  145. user=User.objects.filter(username=data["username"]).get(), friend=request.user)
  146. temp_friends_2 = Friends.objects.filter(
  147. friend=User.objects.filter(username=data["username"]).get(), user=request.user)
  148. except Friends.DoesNotExist:
  149. return HttpResponse(status=422)
  150. if not temp_friends_1 and not temp_friends_2:
  151. return HttpResponse(status=400)
  152. if temp_friends_1:
  153. for temp_friend in temp_friends_1:
  154. temp_friend.delete()
  155. if temp_friends_2:
  156. for temp_friend in temp_friends_2:
  157. temp_friend.delete()
  158. return HttpResponse(status=200)
  159. else:
  160. return HttpResponse(status=400)
  161. elif request.method == 'GET':
  162. if DEBUG:
  163. return render(request, 'delete_friend.html')