第一个项目

This commit is contained in:
2025-02-16 21:51:06 +08:00
commit 1bbb2f79dc
62 changed files with 956 additions and 0 deletions

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

16
family_rpa/main/admin.py Normal file
View File

@@ -0,0 +1,16 @@
from django.contrib import admin
from .models import File, Message
@admin.register(File)
class FileAdmin(admin.ModelAdmin):
list_display = ('file', 'owner', 'created_at', 'is_public')
list_filter = ('is_public', 'created_at')
search_fields = ('file', 'description')
date_hierarchy = 'created_at'
@admin.register(Message)
class MessageAdmin(admin.ModelAdmin):
list_display = ('author', 'content', 'created_at', 'ip_address')
list_filter = ('created_at', 'ip_address')
search_fields = ('author', 'content')
date_hierarchy = 'created_at'

6
family_rpa/main/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class MainConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'main'

18
family_rpa/main/forms.py Normal file
View File

@@ -0,0 +1,18 @@
from django import forms
from .models import File, Message
class FileUploadForm(forms.ModelForm):
class Meta:
model = File
fields = ['file', 'description', 'is_public']
widgets = {
'description': forms.Textarea(attrs={'rows': 3}),
}
class MessageForm(forms.ModelForm):
class Meta:
model = Message
fields = ['author', 'content']
widgets = {
'content': forms.Textarea(attrs={'rows': 5}),
}

View File

@@ -0,0 +1,11 @@
from django.core.management.base import BaseCommand
from django.utils import timezone
from ...models import Message
class Command(BaseCommand):
help = 'Clean up messages older than 7 days'
def handle(self, *args, **options):
one_week_ago = timezone.now() - timezone.timedelta(days=7)
deleted_count, _ = Message.objects.filter(created_at__lt=one_week_ago).delete()
self.stdout.write(self.style.SUCCESS(f'Successfully deleted {deleted_count} old messages'))

View File

@@ -0,0 +1,41 @@
# Generated by Django 5.1.4 on 2025-02-15 13:07
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Message',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('author', models.CharField(max_length=100)),
('content', models.TextField()),
('created_at', models.DateTimeField(auto_now_add=True)),
('ip_address', models.GenericIPAddressField(blank=True, null=True)),
],
options={
'ordering': ['-created_at'],
},
),
migrations.CreateModel(
name='File',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('file', models.FileField(upload_to='uploads/')),
('description', models.TextField(blank=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('is_public', models.BooleanField(default=False)),
('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@@ -0,0 +1,21 @@
# Generated by Django 5.1.4 on 2025-02-15 13:51
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('main', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AlterField(
model_name='file',
name='owner',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
]

View File

25
family_rpa/main/models.py Normal file
View File

@@ -0,0 +1,25 @@
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
class File(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
file = models.FileField(upload_to='uploads/')
description = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
is_public = models.BooleanField(default=True)
def __str__(self):
return self.file.name
class Message(models.Model):
author = models.CharField(max_length=100)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
ip_address = models.GenericIPAddressField(null=True, blank=True)
def __str__(self):
return f"来自 {self.author} 的留言"
class Meta:
ordering = ['-created_at']

3
family_rpa/main/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

9
family_rpa/main/urls.py Normal file
View File

@@ -0,0 +1,9 @@
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('upload/', views.upload_file, name='upload'),
path('delete/<int:file_id>/', views.delete_file, name='delete'),
path('message/', views.post_message, name='message'),
]

53
family_rpa/main/views.py Normal file
View File

@@ -0,0 +1,53 @@
from django.shortcuts import render, redirect, get_object_or_404
from django.http import HttpResponse
from django.utils import timezone
from django.core.files.storage import default_storage
from django.core.paginator import Paginator
from .models import File, Message
from .forms import FileUploadForm, MessageForm
from django.utils.timezone import timedelta
def home(request):
# 获取最近一周的留言
one_week_ago = timezone.now() - timedelta(days=7)
messages = Message.objects.filter(created_at__gte=one_week_ago).order_by('-created_at')
# 获取公开文件
files = File.objects.filter(is_public=True).order_by('-created_at')
return render(request, 'main/home.html', {
'messages': messages,
'files': files
})
def upload_file(request):
if request.method == 'POST':
form = FileUploadForm(request.POST, request.FILES)
if form.is_valid():
file = form.save(commit=False)
if request.user.is_authenticated:
file.owner = request.user
file.save()
return redirect('home')
else:
form = FileUploadForm()
return render(request, 'main/upload.html', {'form': form})
def delete_file(request, file_id):
file = get_object_or_404(File, id=file_id)
if request.user == file.owner:
file.file.delete()
file.delete()
return redirect('home')
def post_message(request):
if request.method == 'POST':
form = MessageForm(request.POST)
if form.is_valid():
message = form.save(commit=False)
message.ip_address = request.META.get('HTTP_X_FORWARDED_FOR', request.META.get('REMOTE_ADDR'))
message.save()
return redirect('home')
else:
form = MessageForm()
return render(request, 'main/message.html', {'form': form})