init. 初始化项目,并初步完成前端模板样式

This commit is contained in:
2026-03-26 11:08:42 +08:00
commit af9d7a676f
116 changed files with 5266 additions and 0 deletions
View File
+24
View File
@@ -0,0 +1,24 @@
from django.contrib import admin
from django.utils.html import format_html
from article.models import Section, Carousel, Article, Notice, NoticeReceipt
from base.models import MainMenu, FooterLink
from users.models import User
# —————— 主菜单 ——————
@admin.register(MainMenu)
class MainMenuAdmin(admin.ModelAdmin):
list_display = ('title', 'url', 'parent', 'order', 'visible')
list_editable = ('order', 'visible')
list_filter = ('parent', 'visible')
search_fields = ('title', 'url')
ordering = ('order',)
# —————— 页脚链接 ——————
@admin.register(FooterLink)
class FooterLinkAdmin(admin.ModelAdmin):
list_display = ('title', 'url', 'order')
list_editable = ('order',)
ordering = ('order',)
+6
View File
@@ -0,0 +1,6 @@
from django.apps import AppConfig
class BaseConfig(AppConfig):
name = 'base'
verbose_name = '系统设置'
+44
View File
@@ -0,0 +1,44 @@
# Generated by Django 6.0.3 on 2026-03-24 10:31
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='FooterLink',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=50, verbose_name='链接文字')),
('url', models.URLField(verbose_name='链接地址')),
('order', models.IntegerField(default=0, verbose_name='排序')),
],
options={
'verbose_name': '页脚链接',
'verbose_name_plural': '页脚管理',
},
),
migrations.CreateModel(
name='MainMenu',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=50, verbose_name='菜单标题')),
('url', models.CharField(help_text='如 /news/ 或 外链 https://xxx', max_length=200, verbose_name='链接地址')),
('is_external', models.BooleanField(default=False, verbose_name='是否外链')),
('order', models.IntegerField(default=0, verbose_name='排序')),
('visible', models.BooleanField(default=True, verbose_name='是否显示')),
('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='base.mainmenu', verbose_name='父菜单')),
],
options={
'verbose_name': '主菜单',
'verbose_name_plural': '主菜单管理',
},
),
]
View File
+27
View File
@@ -0,0 +1,27 @@
from django.db import models
# Create your models here.
class MainMenu(models.Model):
title = models.CharField("菜单标题", max_length=50)
url = models.CharField("链接地址", max_length=200, help_text="如 /news/ 或 外链 https://xxx")
is_external = models.BooleanField("是否外链", default=False)
parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, verbose_name="父菜单")
order = models.IntegerField("排序", default=0)
visible = models.BooleanField("是否显示", default=True)
class Meta:
verbose_name = "主菜单"
verbose_name_plural = "主菜单管理"
def __str__(self):
return self.title
class FooterLink(models.Model):
title = models.CharField("链接文字", max_length=50)
url = models.URLField("链接地址")
order = models.IntegerField("排序", default=0)
class Meta:
verbose_name = "页脚链接"
verbose_name_plural = "页脚管理"
+3
View File
@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.
+5
View File
@@ -0,0 +1,5 @@
from django.shortcuts import render
from ninja import Router
# Create your views here.
router = Router(tags=['content'])