177 lines
5.9 KiB
Python
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')
|