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})