No Description

views.py 7.0KB

    # -*- coding: utf-8 -*- from curtail_uuid import CurtailUUID from django.contrib.auth.hashers import check_password, make_password from django.contrib.auth.models import Group, User from django.http import JsonResponse from rest_framework import viewsets from TimeConvert import TimeConvert as tc from account.models import LensmanInfo, UserInfo, UserLoginLogInfo from account.serializers import GroupSerializer, LensmanInfoSerializer, UserInfoSerializer, UserSerializer from utils.error.errno_utils import LensmanStatusCode, UserStatusCode from utils.error.response_utils import response from utils.ip_utils import ip_addr # curl -X POST -F username=xxxxxxx -F password=xxxxxxx http://api.pai.ai/login def lensman_login_api(request): username = request.POST.get('username', '') password = request.POST.get('password', '') try: lensman = LensmanInfo.objects.get(username=username) except LensmanInfo.DoesNotExist: return response(LensmanStatusCode.LENSMAN_NOT_FOUND) if not check_password(password, lensman.encryption): return response(LensmanStatusCode.LENSMAN_PASSWORD_ERROR) return JsonResponse({ 'status': 200, 'message': u'登录成功', 'data': { 'user': lensman.lensman_id }, }) def user_is_registered_api(request): username = request.POST.get('username', '') return JsonResponse({ 'status': 200, 'message': '', 'data': { 'registered': UserInfo.objects.filter(username=username).exists(), } }) def user_signup_api(request): user_id = request.POST.get('user_id', '') username = request.POST.get('username', '') password = request.POST.get('password', '') if UserInfo.objects.filter(username=username).exists(): return response(UserStatusCode.USERNAME_HAS_REGISTERED) # 判断 user_id 是否存在并且为分配用户,如果存在并且为分配用户,则直接在该帐户上更新,否则则直接创建帐户 signup_ip, signup_at = ip_addr(request), tc.utc_datetime() try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: user = None if user and user.user_status == UserInfo.ASSIGN: user.user_from = UserInfo.APP_USER, user.username = username user.password = make_password(password, None, 'pbkdf2_sha256') user.user_status = UserInfo.ACTIVATED user.signup_ip = signup_ip user.signup_at = signup_at user.save() else: user = UserInfo.objects.create( user_id=CurtailUUID.uuid(UserInfo, 'user_id'), user_from=UserInfo.APP_USER, username=username, password=make_password(password, None, 'pbkdf2_sha256'), user_status=UserInfo.ACTIVATED, signup_ip=signup_ip, signup_at=signup_at, ) return JsonResponse({ 'status': 200, 'message': u'注册成功', 'data': user.data, }) def user_login_api(request): username = request.POST.get('username', '') password = request.POST.get('password', '') try: user = UserInfo.objects.get(username=username) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) login_ip, login_at = ip_addr(request), tc.utc_datetime() if not check_password(password, user.password): UserLoginLogInfo.objects.create( user_id=user.user_id, login_ip=login_ip, login_result=UserLoginLogInfo.PWD_ERROR ) return response(UserStatusCode.USER_PASSWORD_ERROR) UserLoginLogInfo.objects.create( user_id=user.user_id, login_ip=login_ip, login_result=UserLoginLogInfo.SUCCESS ) user.login_ip = login_ip user.login_at = login_at user.save() return JsonResponse({ 'status': 200, 'message': u'登录成功', 'data': user.data, }) def wx_authorize_api(request): user_id = request.POST.get('user_id', '') wx_uid = request.POST.get('wx_uid', '') unionid = request.POST.get('unionid', '') sex = request.POST.get('sex', 0) nickname = request.POST.get('nickname', '') or request.POST.get('screen_name', '') avatar = request.POST.get('headimgurl', '') or request.POST.get('profile_image_url', '') country = request.POST.get('country', '') province = request.POST.get('province', '') city = request.POST.get('city', '') # 判断 wx_uid 是否已经存在,如果已经存在,则直接返回改帐户信息 try: user = UserInfo.objects.get(wx_uid=wx_uid) except UserInfo.DoesNotExist: user = None if user: user.unionid = unionid user.sex = sex user.nickname = nickname user.avatar = avatar user.country = country user.province = province user.city = city user.save() return JsonResponse({ 'status': 200, 'message': u'登录成功', 'data': user.data, }) # wx_uid 不存在 # 判断 user_id 是否存在并且为分配用户,如果存在并且为分配用户,则直接在该帐户上更新,否则则直接创建帐户 signup_ip, signup_at = ip_addr(request), tc.utc_datetime() try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: user = None if user and user.user_status == UserInfo.ASSIGN: user.user_from = UserInfo.WX_USER user.wx_uid = wx_uid user.unionid = unionid user.sex = sex user.nickname = nickname user.avatar = avatar user.country = country user.province = province user.city = city user.signup_ip = signup_ip user.signup_at = signup_at user.save() else: user = UserInfo.objects.create( user_id=CurtailUUID.uuid(UserInfo, 'user_id'), user_from=UserInfo.WX_USER, wx_uid=wx_uid, unionid=unionid, sex=sex, nickname=nickname, avatar=avatar, country=country, province=province, city=city, user_status=UserInfo.ACTIVATED, signup_ip=signup_ip, signup_at=signup_at, ) return JsonResponse({ 'status': 200, 'message': u'登录成功', 'data': user.data, }) class UserViewSet(viewsets.ModelViewSet): """ API endpoint that allows users to be viewed or edited. """ queryset = User.objects.all().order_by('-pk') serializer_class = UserSerializer class GroupViewSet(viewsets.ModelViewSet): """ API endpoint that allows groups to be viewed or edited. """ queryset = Group.objects.all() serializer_class = GroupSerializer class LensmanInfoViewSet(viewsets.ModelViewSet): queryset = LensmanInfo.objects.all().order_by('-pk') serializer_class = LensmanInfoSerializer class UserInfoViewSet(viewsets.ModelViewSet): queryset = UserInfo.objects.all().order_by('-pk') serializer_class = UserInfoSerializer