| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- from django.shortcuts import render
- # Create your views here.
- from datetime import datetime, time
- from .models import User, LoginToken
- from django.http import JsonResponse, HttpResponse
- from rest_framework.decorators import api_view
- from .decorators import login_required
- def auth_with_username_or_email(username, password):
- if '@' in username:
- user = User.objects.get(email=username, password=password)
- else:
- user = User.objects.get(username=username, password=password)
- return user
- @api_view(['POST'])
- def register(request):
- username = request.data.get('username', '')
- password = request.data.get('password', '')
- email = request.data.get('email', '')
- if not username or not password or not email:
- return JsonResponse({'code': 303, 'error': '用户名/密码/邮箱不能为空'})
- else:
- if User.objects.filter(username=username):
- print('用户名已存在')
- return JsonResponse({'code': 301, 'error': '用户名已存在'})
- if User.objects.filter(email=email):
- print('邮箱已存在')
- return JsonResponse({'code': 302, 'error': '邮箱已存在'})
- try:
- User.objects.create(username=username, password=password, email=email)
- print('注册成功')
- return JsonResponse({'code': 200})
- except Exception as e:
- print(e)
- return JsonResponse({'code': 400, 'error': str(e)})
- @api_view(['POST'])
- def login(request):
- username = request.data.get('username', '')
- password = request.data.get('password', '')
- token = request.data.get('token', '')
- try:
- user = auth_with_username_or_email(username, password)
- print(user)
- except Exception as e:
- print(e)
- print('用户名或密码错误')
- return JsonResponse({'code': 303, 'error': '用户名或密码错误'})
- print(f'token = {token}')
- if user.check_token(token):
- try:
- user_token = user.tokens.get(token=token)
- print('已登录')
- user_token.delete()
- # return JsonResponse({'code': 303, 'msg': '已登录'}, status=303)
- except Exception as e:
- print('token无效')
- else:
- print('token已过期')
- user.last_login = datetime.now()
- new_token = user.make_token()
- user_token = LoginToken()
- user_token.user = user
- user_token.token = new_token
- user_token.save()
- print('登录成功')
- print(f'new_token = {new_token}')
- return JsonResponse({'code': 200, 'token': new_token})
- @api_view(['POST'])
- def logout(request):
- username = request.data.get('username')
- token = request.data.get('token')
- try:
- user = User.objects.get(username=username)
- except Exception as e:
- print('用户不存在')
- return JsonResponse({'code': 302, 'error': '用户不存在'})
- try:
- user_token = user.tokens.get(token=token)
- user_token.delete()
- except Exception as e:
- print(e)
- print('token无效')
- return JsonResponse({'code': 200})
- @api_view(['POST'])
- def send_email_verification_code(request):
- username = request.data.get('username')
- if not username:
- return JsonResponse({'code': 301, 'error': '用户名不能为空'})
- try:
- user = User.objects.get(username=username)
- except:
- print('用户不存在')
- return JsonResponse({'code': 302, 'error': '用户不存在'})
- try:
- # 发送验证码
- token = user.make_token()
- print(f'发送验证码 email = {user.email} token = {token}')
- user.send_email('ST网盘重置密码验证码', token)
- return JsonResponse({'code': 200})
- except Exception as e:
- print(e)
- return JsonResponse({'code': 303, 'error': str(e)})
- @api_view(['POST'])
- def check_token(request):
- username = request.data.get('username')
- token = request.data.get('token')
- if not username:
- return JsonResponse({'code': 301, 'error': '用户名不能为空'})
- try:
- user = User.objects.get(username=username)
- except:
- print('用户不存在')
- return JsonResponse({'code': 302, 'error': '用户不存在'})
- if token and user.check_token(token):
- print('验证码有效')
- return JsonResponse({'code': 200})
- else:
- return JsonResponse({'code': 303, 'error': '验证码无效'})
- @api_view(['POST'])
- def reset_password(request):
- username = request.data.get('username')
- password = request.data.get('password')
- token = request.data.get('token')
- if not username:
- return JsonResponse({'code': 301, 'error': '用户名不能为空'})
- try:
- user = User.objects.get(username=username)
- except:
- print('用户不存在')
- return JsonResponse({'code': 302, 'error': '用户不存在'})
- print(f'token={token}')
- if token and user.check_token(token):
- # 重置密码
- print("验证码有效")
- user.password = password
- user.save()
- return JsonResponse({'code': 200})
- else:
- print("验证码无效")
- return JsonResponse({'code': 303, 'error': '验证码无效'})
|