from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth import login from django.contrib.auth.forms import UserCreationForm from .forms import CustomUserCreationForm from django.contrib.auth.decorators import login_required from .models import File, Message, PublicMessage, PublicFile, Friendship from .forms import FileUploadForm, MessageForm, PublicMessageForm, PublicFileForm, FriendRequestForm, FriendActionForm def home(request): public_files = PublicFile.objects.all().order_by('-created_at') public_messages = PublicMessage.objects.all().order_by('-created_at') if request.method == 'POST': if 'submit_message' in request.POST: form = PublicMessageForm(request.POST) if form.is_valid(): message = form.save(commit=False) message.ip_address = request.META.get('REMOTE_ADDR') message.save() return redirect('home') elif 'submit_file' in request.POST: file_form = PublicFileForm(request.POST, request.FILES) if file_form.is_valid(): public_file = file_form.save(commit=False) public_file.ip_address = request.META.get('REMOTE_ADDR') public_file.save() return redirect('home') else: form = PublicMessageForm() file_form = PublicFileForm() return render(request, 'main/home.html', { 'public_files': public_files, 'public_messages': public_messages, 'form': form, 'file_form': file_form }) @login_required def dashboard(request): files = File.objects.filter(owner=request.user) shared_files = File.objects.filter(shared_with=request.user) messages = Message.objects.filter(recipients=request.user) return render(request, 'main/dashboard.html', { 'files': files, 'shared_files': shared_files, 'messages': messages }) @login_required def upload_file(request): if request.method == 'POST': form = FileUploadForm(request.POST, request.FILES) if form.is_valid(): file = form.save(commit=False) file.owner = request.user # Handle public file sharing if form.cleaned_data['is_public']: file.shared_with.clear() file.save() form.save_m2m() return redirect('dashboard') else: form = FileUploadForm() return render(request, 'main/upload.html', {'form': form}) @login_required def delete_file(request, file_id): file = get_object_or_404(File, id=file_id, owner=request.user) if request.method == 'POST': file.delete() return redirect('dashboard') @login_required def send_message(request): if request.method == 'POST': form = MessageForm(request.POST) if form.is_valid(): message = form.save(commit=False) message.sender = request.user message.save() form.save_m2m() return redirect('dashboard') else: form = MessageForm() return render(request, 'main/send_message.html', {'form': form}) def register(request): if request.method == 'POST': form = CustomUserCreationForm(request.POST) if form.is_valid(): user = form.save() login(request, user) return redirect('dashboard') else: # 添加错误提示 return render(request, 'registration/register.html', { 'form': form, 'error': '注册失败,请检查输入信息' }) else: form = CustomUserCreationForm() return render(request, 'registration/register.html', {'form': form}) @login_required def search_files(request): query = request.GET.get('q') results = [] if query: results = File.objects.filter( file__icontains=query, owner=request.user ) | File.objects.filter( file__icontains=query, shared_with=request.user ) return render(request, 'main/search.html', { 'results': results, 'query': query }) @login_required def send_friend_request(request): if request.method == 'POST': form = FriendRequestForm(request.POST) if form.is_valid(): to_user = form.cleaned_data['username'] # 检查是否已经存在好友请求 if not Friendship.objects.filter( from_user=request.user, to_user=to_user ).exists(): Friendship.objects.create( from_user=request.user, to_user=to_user, status='pending' ) return redirect('manage_friends') else: form = FriendRequestForm() return render(request, 'main/send_friend_request.html', {'form': form}) @login_required def manage_friends(request): # 获取所有待处理的好友请求 pending_requests = Friendship.objects.filter( to_user=request.user, status='pending' ) # 获取已接受的好友列表 friends = Friendship.objects.filter( models.Q(from_user=request.user) | models.Q(to_user=request.user), status='accepted' ).select_related('from_user', 'to_user') return render(request, 'main/manage_friends.html', { 'pending_requests': pending_requests, 'friends': friends }) @login_required def handle_friend_request(request, request_id): friendship = get_object_or_404(Friendship, id=request_id, to_user=request.user) if request.method == 'POST': form = FriendActionForm(request.POST) if form.is_valid(): action = form.cleaned_data['action'] if action == 'accept': friendship.status = 'accepted' else: friendship.status = 'rejected' friendship.save() return redirect('manage_friends')