Exemple #1
0
def email_verification(request, email):
    """向用户提供的邮箱发送验证码"""
    try:
        verification = Verification.objects.get(email=email)
    except Verification.DoesNotExist:
        verification = Verification(email=email)
    code = gen_random_code(6)
    serializer = VerificationSerializer(verification,
                                        data={'code': code},
                                        partial=True)

    if not serializer.is_valid():
        return Response(serializer.errors, status.HTTP_400_BAD_REQUEST)
    if User.objects.filter(email=email).exists():
        return Response(detail('该用户已注册'), status.HTTP_403_FORBIDDEN)
    try:
        # 测试用例认为邮件内容的最后6个字符是验证码
        send_mail(
            '邮箱验证',
            f'{settings.PROJECT_VERBOSE_NAME}感谢您的注册,您的验证码是 {code}',
            settings.EMAIL_FROM,
            recipient_list=[
                email,
            ],
            fail_silently=False,
        )
    except smtplib.SMTPException:
        return Response(detail('验证邮件发送失败'),
                        status.HTTP_412_PRECONDITION_FAILED)

    serializer.save()
    return Response(status=status.HTTP_204_NO_CONTENT)
def leave_team(request, email):
    """请离当前队伍中某队员"""
    team: Team = request.user.member.team
    if team is None:
        return Response(detail('未加入任何队伍'), status.HTTP_403_FORBIDDEN)
    if email == 'self':
        member: Member = request.user.member
    else:
        member = get_object_or_404(Member, user__email=email)
    if member not in team.members.all():
        return Response(detail('队伍中无此人'), status.HTTP_403_FORBIDDEN)
    member.team = None
    member.save(update_fields=['team'])
    return Response(status=status.HTTP_204_NO_CONTENT)
def join_team(request, id):
    """加入队伍"""
    member: Member = request.user.member
    if member.team is not None:
        return Response(detail('已经在一个队伍里面了'), status.HTTP_403_FORBIDDEN)
    member.team = get_object_or_404(Team, id=id)
    member.save(update_fields=['team'])
    return Response(status=status.HTTP_204_NO_CONTENT)
 def create(self, request, *args, **kwargs):
     """创建并加入"""
     member: Member = request.user.member
     if member.team is not None:
         return Response(detail('已经在一个队伍里面了'), status.HTTP_403_FORBIDDEN)
     serializer = self.get_serializer(data=request.data)
     serializer.is_valid(raise_exception=True)
     self.perform_create(serializer)
     team = Team.objects.get(id=serializer.data['id'])
     member.team = team
     member.save(update_fields=['team'])
     headers = self.get_success_headers(serializer.data)
     return Response(serializer.data,
                     status=status.HTTP_201_CREATED,
                     headers=headers)
Exemple #5
0
def email_register(request):
    """邮箱验证"""
    serializer = EmailRegisterSerializer(data=request.data)
    if not serializer.is_valid():
        return Response(serializer.errors, status.HTTP_400_BAD_REQUEST)

    try:
        user_email = serializer.validated_data.get('email')
        verification = Verification.objects.get(
            email=user_email, code=serializer.validated_data.get('code'))
    except Verification.DoesNotExist:
        return Response(detail('验证码无效'), status.HTTP_403_FORBIDDEN)

    verification.delete()
    serializer.save()
    response = Response(serializer.validated_data, status.HTTP_201_CREATED)
    response.data['token'] = 'Token ' + Token.objects.get(
        user__email=user_email).key
    response.set_cookie('token', response.data['token'])
    return response