Initial commit
This commit is contained in:
176
main/views.py
Normal file
176
main/views.py
Normal file
@@ -0,0 +1,176 @@
|
||||
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')
|
||||
Reference in New Issue
Block a user