拍爱

views.py 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. # -*- coding: utf-8 -*-
  2. from curtail_uuid import CurtailUUID
  3. from django.contrib.auth.models import Group, User
  4. from django.db import transaction
  5. from ipaddr import client_ip
  6. from logit import logit
  7. from rest_framework import viewsets
  8. from TimeConvert import TimeConvert as tc
  9. from account.models import LensmanInfo, UserInfo
  10. from account.serializers import GroupSerializer, LensmanInfoSerializer, UserInfoSerializer, UserSerializer
  11. from operation.models import GuestEntranceControlInfo
  12. from utils.error.errno_utils import UserStatusCode
  13. from utils.error.response_utils import response
  14. from utils.redis.rguest import get_guest_entrance_control
  15. from utils.redis.rprofile import set_profile_info
  16. from utils.version_utils import is_version_match
  17. @logit
  18. @transaction.atomic
  19. def user_wx_authorize_api(request):
  20. # Get or Create User
  21. user, created = UserInfo.objects.select_for_update().get_or_create(unionid=request.POST.get('unionid', ''))
  22. # Set User_id
  23. if created:
  24. user.user_id = CurtailUUID.uuid(UserInfo, 'user_id')
  25. # Set User Key's Value
  26. user.user_from = UserInfo.USER_USER
  27. user.openid = request.POST.get('wx_uid', '')
  28. user.sex = request.POST.get('sex', 0)
  29. user.nickname = request.POST.get('nickname', '') or request.POST.get('screen_name', '')
  30. user.avatar = request.POST.get('headimgurl', '') or request.POST.get('profile_image_url', '')
  31. user.country = request.POST.get('country', '')
  32. user.province = request.POST.get('province', '')
  33. user.city = request.POST.get('city', '')
  34. user.user_status = UserInfo.ACTIVATED
  35. user.signup_ip = client_ip(request)
  36. user.signup_at = tc.utc_datetime()
  37. user.save()
  38. set_profile_info(user)
  39. return response(200, 'User Login Success', u'用户端登录成功', user.data)
  40. @logit
  41. @transaction.atomic
  42. def user_guest_login_api(request):
  43. """ 游客登录 """
  44. gen = get_guest_entrance_control()
  45. # 是否配置游客入口控制信息
  46. if not gen:
  47. return response(UserStatusCode.GUEST_NOT_ALLOWED)
  48. # 平台校验
  49. platform = gen.get('platform', '')
  50. if request.Android:
  51. if platform not in [GuestEntranceControlInfo.ADR, GuestEntranceControlInfo.BOTH]:
  52. return response(UserStatusCode.GUEST_NOT_ALLOWED)
  53. else:
  54. if platform not in [GuestEntranceControlInfo.IOS, GuestEntranceControlInfo.BOTH]:
  55. return response(UserStatusCode.GUEST_NOT_ALLOWED)
  56. # 版本校验
  57. if not is_version_match(request, gen):
  58. return response(UserStatusCode.GUEST_NOT_ALLOWED)
  59. # 通用唯一识别码 (Universally Unique Identifier)
  60. uuid = request.POST.get('uuid', '')
  61. # 游客字段
  62. fields = {
  63. 'user_id': CurtailUUID.uuid(UserInfo, 'user_id'),
  64. 'user_from': UserInfo.GUEST_USER,
  65. 'uuid': uuid,
  66. 'nickname': u'游客',
  67. 'user_status': UserInfo.ACTIVATED,
  68. }
  69. # 若 uuid 存在,则 get_or_create,否则 create
  70. if uuid:
  71. user, created = UserInfo.objects.select_for_update().get_or_create(user_from=UserInfo.GUEST_USER, uuid=uuid, defaults=fields)
  72. if created:
  73. user.nickname = u'游客{}'.format(user.pk)
  74. user.save()
  75. else:
  76. user = UserInfo.objects.select_for_update().create(**fields)
  77. user.nickname = u'游客{}'.format(user.pk)
  78. user.save()
  79. return response(200, 'Guest Login Success', u'游客登录成功', user.data)
  80. class UserViewSet(viewsets.ModelViewSet):
  81. """
  82. API endpoint that allows users to be viewed or edited.
  83. """
  84. queryset = User.objects.all().order_by('-pk')
  85. serializer_class = UserSerializer
  86. class GroupViewSet(viewsets.ModelViewSet):
  87. """
  88. API endpoint that allows groups to be viewed or edited.
  89. """
  90. queryset = Group.objects.all()
  91. serializer_class = GroupSerializer
  92. class LensmanInfoViewSet(viewsets.ModelViewSet):
  93. queryset = LensmanInfo.objects.all().order_by('-pk')
  94. serializer_class = LensmanInfoSerializer
  95. class UserInfoViewSet(viewsets.ModelViewSet):
  96. queryset = UserInfo.objects.all().order_by('-pk')
  97. serializer_class = UserInfoSerializer