Files
file_message_transfer/main/views.py
2025-01-05 10:45:32 +08:00

177 lines
5.9 KiB
Python

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