269 lines
8.7 KiB
Python
269 lines
8.7 KiB
Python
![]() |
from django.http import JsonResponse
|
||
|
# from .models import TiktokUserVideos
|
||
|
import logging
|
||
|
import os
|
||
|
from django.views.decorators.http import require_http_methods
|
||
|
from django.views.decorators.csrf import csrf_exempt
|
||
|
from django.shortcuts import render
|
||
|
import json
|
||
|
import requests
|
||
|
import concurrent.futures
|
||
|
import shutil
|
||
|
import dotenv
|
||
|
import random
|
||
|
|
||
|
dotenv.load_dotenv()
|
||
|
|
||
|
# 添加logger定义
|
||
|
logger = logging.getLogger(__name__)
|
||
|
|
||
|
directory_monitoring = {}
|
||
|
|
||
|
# 全局变量来控制检测线程
|
||
|
monitor_thread = None
|
||
|
is_monitoring = False
|
||
|
|
||
|
@csrf_exempt
|
||
|
@require_http_methods(["POST"])
|
||
|
def user_login(request):
|
||
|
"""用户登录接口,首次登录会返回需要填写信息的标志"""
|
||
|
try:
|
||
|
from .models import User
|
||
|
import json
|
||
|
from django.contrib.auth.hashers import check_password, make_password
|
||
|
from datetime import datetime
|
||
|
|
||
|
data = json.loads(request.body)
|
||
|
|
||
|
# 获取登录参数
|
||
|
email = data.get('email')
|
||
|
password = data.get('password')
|
||
|
|
||
|
if not email or not password:
|
||
|
return JsonResponse({
|
||
|
'code': 400,
|
||
|
'message': '缺少必要参数: email 或 password',
|
||
|
'data': None
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
# 查询用户
|
||
|
try:
|
||
|
user = User.objects.get(email=email)
|
||
|
|
||
|
# 验证密码
|
||
|
# 注意:这里假设密码已经进行了哈希存储,实际使用时需要采用适当的密码验证方法
|
||
|
# 如果密码未哈希存储,直接比较原始密码
|
||
|
password_valid = (user.password == password)
|
||
|
|
||
|
if not password_valid:
|
||
|
return JsonResponse({
|
||
|
'code': 401,
|
||
|
'message': '用户名或密码错误',
|
||
|
'data': None
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
# 检查是否首次登录
|
||
|
is_first_login = user.is_first_login
|
||
|
|
||
|
# 更新最后登录时间
|
||
|
user.last_login = datetime.now()
|
||
|
user.save()
|
||
|
|
||
|
# 构造返回数据
|
||
|
user_data = {
|
||
|
'user_id': user.id,
|
||
|
'email': user.email,
|
||
|
'is_first_login': is_first_login,
|
||
|
'name': user.name,
|
||
|
'company': user.company
|
||
|
}
|
||
|
|
||
|
return JsonResponse({
|
||
|
'code': 200,
|
||
|
'message': '登录成功',
|
||
|
'data': user_data
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
except User.DoesNotExist:
|
||
|
# 用户不存在,创建新用户
|
||
|
new_user = User.objects.create(
|
||
|
email=email,
|
||
|
password=password, # 注意:实际使用时应该哈希存储密码
|
||
|
is_first_login=True,
|
||
|
last_login=datetime.now()
|
||
|
)
|
||
|
|
||
|
return JsonResponse({
|
||
|
'code': 200,
|
||
|
'message': '登录成功',
|
||
|
'data': {
|
||
|
'user_id': new_user.id,
|
||
|
'email': new_user.email,
|
||
|
'is_first_login': True,
|
||
|
'name': None,
|
||
|
'company': None
|
||
|
}
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
except Exception as e:
|
||
|
logger.error(f"用户登录失败: {e}")
|
||
|
import traceback
|
||
|
logger.error(f"详细错误: {traceback.format_exc()}")
|
||
|
return JsonResponse({
|
||
|
'code': 500,
|
||
|
'message': f'登录失败: {str(e)}',
|
||
|
'data': None
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
|
||
|
@csrf_exempt
|
||
|
@require_http_methods(["POST"])
|
||
|
def update_user_info(request):
|
||
|
"""更新用户信息,首次登录时填写公司和姓名"""
|
||
|
try:
|
||
|
from .models import User
|
||
|
import json
|
||
|
|
||
|
data = json.loads(request.body)
|
||
|
|
||
|
# 获取参数
|
||
|
user_id = data.get('user_id')
|
||
|
company = data.get('company')
|
||
|
name = data.get('name')
|
||
|
|
||
|
if not user_id:
|
||
|
return JsonResponse({
|
||
|
'code': 400,
|
||
|
'message': '缺少必要参数: user_id',
|
||
|
'data': None
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
# 如果是首次登录,需要填写公司和姓名
|
||
|
if not company or not name:
|
||
|
return JsonResponse({
|
||
|
'code': 400,
|
||
|
'message': '首次登录需要填写公司和姓名',
|
||
|
'data': None
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
# 查询用户并更新信息
|
||
|
try:
|
||
|
user = User.objects.get(id=user_id)
|
||
|
|
||
|
# 更新信息
|
||
|
user.company = company
|
||
|
user.name = name
|
||
|
user.is_first_login = False # 更新后不再是首次登录
|
||
|
user.save()
|
||
|
|
||
|
return JsonResponse({
|
||
|
'code': 200,
|
||
|
'message': '信息更新成功',
|
||
|
'data': {
|
||
|
'user_id': user.id,
|
||
|
'email': user.email,
|
||
|
'is_first_login': False,
|
||
|
'name': user.name,
|
||
|
'company': user.company
|
||
|
}
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
except User.DoesNotExist:
|
||
|
return JsonResponse({
|
||
|
'code': 404,
|
||
|
'message': f'找不到ID为 {user_id} 的用户',
|
||
|
'data': None
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
except Exception as e:
|
||
|
logger.error(f"更新用户信息失败: {e}")
|
||
|
import traceback
|
||
|
logger.error(f"详细错误: {traceback.format_exc()}")
|
||
|
return JsonResponse({
|
||
|
'code': 500,
|
||
|
'message': f'更新用户信息失败: {str(e)}',
|
||
|
'data': None
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
|
||
|
@csrf_exempt
|
||
|
@require_http_methods(["POST"])
|
||
|
def user_register(request):
|
||
|
"""用户注册接口,允许用户创建新账户,可选填写公司和姓名"""
|
||
|
try:
|
||
|
from .models import User
|
||
|
import json
|
||
|
from datetime import datetime
|
||
|
|
||
|
data = json.loads(request.body)
|
||
|
|
||
|
# 获取注册参数
|
||
|
email = data.get('email')
|
||
|
password = data.get('password')
|
||
|
company = data.get('company') # 可选参数
|
||
|
name = data.get('name') # 可选参数
|
||
|
|
||
|
# 检查必要参数
|
||
|
if not email or not password:
|
||
|
return JsonResponse({
|
||
|
'code': 400,
|
||
|
'message': '缺少必要参数: email 或 password',
|
||
|
'data': None
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
# 检查邮箱是否已注册
|
||
|
if User.objects.filter(email=email).exists():
|
||
|
return JsonResponse({
|
||
|
'code': 409,
|
||
|
'message': '该邮箱已注册',
|
||
|
'data': None
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
# 创建用户
|
||
|
try:
|
||
|
# 根据是否提供公司和姓名决定是否为首次登录
|
||
|
is_first_login = not (company and name)
|
||
|
|
||
|
# 创建用户
|
||
|
user = User.objects.create(
|
||
|
email=email,
|
||
|
password=password, # 注意:实际使用时应该哈希存储密码
|
||
|
company=company,
|
||
|
name=name,
|
||
|
is_first_login=is_first_login,
|
||
|
last_login=datetime.now()
|
||
|
)
|
||
|
|
||
|
# 构造返回数据
|
||
|
user_data = {
|
||
|
'user_id': user.id,
|
||
|
'email': user.email,
|
||
|
'is_first_login': is_first_login,
|
||
|
'company': user.company,
|
||
|
'name': user.name
|
||
|
}
|
||
|
|
||
|
return JsonResponse({
|
||
|
'code': 200,
|
||
|
'message': '注册成功',
|
||
|
'data': user_data
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
except Exception as e:
|
||
|
logger.error(f"创建用户失败: {e}")
|
||
|
return JsonResponse({
|
||
|
'code': 500,
|
||
|
'message': f'注册失败: {str(e)}',
|
||
|
'data': None
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
except Exception as e:
|
||
|
logger.error(f"用户注册失败: {e}")
|
||
|
import traceback
|
||
|
logger.error(f"详细错误: {traceback.format_exc()}")
|
||
|
return JsonResponse({
|
||
|
'code': 500,
|
||
|
'message': f'注册失败: {str(e)}',
|
||
|
'data': None
|
||
|
}, json_dumps_params={'ensure_ascii': False})
|