拍爱

views.py 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # -*- coding: utf-8 -*-
  2. from curtail_uuid import CurtailUUID
  3. from django.conf import settings
  4. from django.db import transaction
  5. from ipaddr import client_ip
  6. from logit import logit
  7. from pywe_miniapp import get_userinfo
  8. from TimeConvert import TimeConvert as tc
  9. from account.models import UserInfo
  10. from utils.error.response_utils import response
  11. from utils.redis.rprofile import set_profile_info
  12. WECHAT = settings.WECHAT
  13. @logit
  14. @transaction.atomic
  15. def get_userinfo_api(request):
  16. wechat = WECHAT.get('MINIAPP', {})
  17. appid = wechat.get('appID')
  18. secret = wechat.get('appsecret')
  19. code = request.POST.get('code', '')
  20. encryptedData = request.POST.get('encryptedData', '')
  21. iv = request.POST.get('iv', '')
  22. userinfo = get_userinfo(appid=appid, secret=secret, code=code, encryptedData=encryptedData, iv=iv)
  23. try:
  24. user = UserInfo.objects.select_for_update().get(unionid=userinfo.get('unionId', ''))
  25. except UserInfo.DoesNotExist:
  26. user = None
  27. if not user:
  28. # {u'avatarUrl': u'http://wx.qlogo.cn/mmopen/vi_32/aSKcBBPpibyKNicHNTMM0qJVh8Kjgiak2AHWr8MHM4WgMEm7GFhsf8OYrySdbvAMvTsw3mo8ibKicsnfN5pRjl1p8HQ/0',
  29. # u'city': u'Guangzhou',
  30. # u'country': u'CN',
  31. # u'gender': 1,
  32. # u'language': u'zh_CN',
  33. # u'nickName': u'Band',
  34. # u'openId': u'oGZUI0egBJY1zhBYw2KhdUfwVJJE',
  35. # u'province': u'Guangdong',
  36. # u'unionId': u'ocMvos6NjeKLIBqg5Mr9QjxrP1FA',
  37. # u'watermark': {u'appid': u'wx4f4bc4dec97d474b', u'timestamp': 1477314187}}
  38. user = UserInfo.objects.create(
  39. user_id=CurtailUUID.uuid(UserInfo, 'user_id'),
  40. user_from=UserInfo.WX_USER,
  41. openid=userinfo.get('openId', ''),
  42. unionid=userinfo.get('unionId', ''),
  43. sex=userinfo.get('gender', 0),
  44. nickname=userinfo.get('nickName', ''),
  45. avatar=userinfo.get('avatarUrl', ''),
  46. country=userinfo.get('country', ''),
  47. province=userinfo.get('province', ''),
  48. city=userinfo.get('city', ''),
  49. user_status=UserInfo.ACTIVATED,
  50. signup_ip=client_ip(request),
  51. signup_at=tc.utc_datetime(),
  52. )
  53. set_profile_info(user)
  54. return response(200, 'Mini App Login Success', u'微信小程序登录成功', user.data)