Explorar o código

# feat:创建一个common模块用于管理公共的数据模型;创建轮播图模型和文章模型;

yang yi hai 2 semanas
pai
achega
0bf26381fc

+ 7 - 0
pythonweb/common/admin.py

@@ -0,0 +1,7 @@
+from django.contrib import admin
+
+from common.models import Article, ArticleAdmin, Banner
+
+# Register your models here.
+admin.site.register(Article,ArticleAdmin)
+admin.site.register(Banner)

+ 6 - 0
pythonweb/common/apps.py

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

+ 42 - 0
pythonweb/common/migrations/0001_initial.py

@@ -0,0 +1,42 @@
+# Generated by Django 3.2.24 on 2026-04-22 10:58
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Article',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('title', models.CharField(max_length=200, verbose_name='标题')),
+                ('markdown_content', models.TextField(verbose_name='markdown内容')),
+                ('html_content', models.TextField(verbose_name='html内容')),
+                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
+                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
+                ('category', models.CharField(choices=[('professional', '专业介绍'), ('leader', '领导分工'), ('academic_leader', '学院学科建设带头人教师'), ('computer_science', '计算机系教师'), ('software_engineering', '软件工程系教师'), ('digital_media', '数字媒体技术系教师'), ('iot_networking', '物联网与网络工程系教师'), ('math_teaching', '数学教研室教师'), ('party_work', '党政学工队伍教师'), ('scientific', '教学科研'), ('party_dynamic', '党建动态'), ('youth_dynamic', '团学动态'), ('admissions', '招生'), ('employment', '就业')], max_length=50, verbose_name='文章分类')),
+                ('cover', models.URLField(verbose_name='封面')),
+            ],
+            options={
+                'ordering': ['-created_at'],
+            },
+        ),
+        migrations.CreateModel(
+            name='Banner',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('title', models.CharField(max_length=200, verbose_name='标题')),
+                ('url', models.URLField(verbose_name='链接')),
+                ('order', models.IntegerField(default=0, verbose_name='序号')),
+            ],
+            options={
+                'ordering': ['order'],
+            },
+        ),
+    ]

+ 23 - 0
pythonweb/common/migrations/0002_auto_20260422_2008.py

@@ -0,0 +1,23 @@
+# Generated by Django 3.2.24 on 2026-04-22 12:08
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('common', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='article',
+            name='cover',
+            field=models.URLField(blank=True, verbose_name='封面'),
+        ),
+        migrations.AlterField(
+            model_name='article',
+            name='html_content',
+            field=models.TextField(blank=True, verbose_name='html内容'),
+        ),
+    ]

+ 17 - 0
pythonweb/common/migrations/0003_alter_banner_options.py

@@ -0,0 +1,17 @@
+# Generated by Django 3.2.24 on 2026-04-22 12:17
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('common', '0002_auto_20260422_2008'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='banner',
+            options={'ordering': ['-order']},
+        ),
+    ]

+ 64 - 0
pythonweb/common/models.py

@@ -0,0 +1,64 @@
+from django.contrib import admin
+from django.db import models
+
+
+class Article(models.Model):
+    CATEGORY_CHOICES = [
+        ('professional', '专业介绍'),
+        ('leader', '领导分工'),
+        ('academic_leader', '学院学科建设带头人教师'),
+        ('computer_science', '计算机系教师'),
+        ('software_engineering', '软件工程系教师'),
+        ('digital_media', '数字媒体技术系教师'),
+        ('iot_networking', '物联网与网络工程系教师'),
+        ('math_teaching', '数学教研室教师'),
+        ('party_work', '党政学工队伍教师'),
+        ('scientific', '教学科研'),
+        ('party_dynamic', '党建动态'),
+        ('youth_dynamic', '团学动态'),
+        ('admissions', '招生'),
+        ('employment', '就业'),
+    ]
+    title = models.CharField(max_length=200, verbose_name='标题')
+    markdown_content = models.TextField(verbose_name='markdown内容')
+    html_content = models.TextField(verbose_name='html内容',blank=True)
+    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
+    updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')
+    category = models.CharField(max_length=50, choices=CATEGORY_CHOICES, verbose_name='文章分类')
+    cover = models.URLField(verbose_name='封面',blank=True)
+
+    class Meta:
+        ordering = ['-created_at']
+
+    def __str__(self):
+        return self.title
+
+class ArticleAdmin(admin.ModelAdmin):
+    # 列表显示字段
+    list_display = ['title', 'category', 'created_at','updated_at']
+
+    # 列表页链接字段(可点击进入编辑)
+    list_display_links = ['title']
+
+    # 侧边栏过滤器
+    list_filter = [
+        'category',  # 分类过滤器
+    ]
+
+    # 搜索框
+    search_fields = ['title']
+
+    # 每页显示数量
+    list_per_page = 20
+
+
+class Banner(models.Model):
+    title = models.CharField(max_length=200, verbose_name='标题')
+    url = models.URLField(verbose_name='链接')
+    order = models.IntegerField(default=0, verbose_name='序号')
+
+    class Meta:
+        ordering = ['-order']
+
+    def __str__(self):
+        return self.title

+ 3 - 0
pythonweb/common/tests.py

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

+ 15 - 0
pythonweb/common/views.py

@@ -0,0 +1,15 @@
+import markdown
+from django.shortcuts import render
+from common.models import Article
+
+
+# Create your views here.
+def article(request,id):
+    art = Article.objects.filter(id=id).first()
+    if art is None:
+        return render(request, '404.html')
+    context = {
+        'title':art.title,
+        'content':markdown.markdown(art.markdown_content),
+    }
+    return render(request, 'article.html',context)

+ 1 - 0
pythonweb/pythonweb/settings.py

@@ -37,6 +37,7 @@ INSTALLED_APPS = [
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
+    'common',
     'homeApp',#主页
     'aboutApp',#学院简介
     'teamApp',#教师团队

+ 2 - 0
pythonweb/pythonweb/urls.py

@@ -19,10 +19,12 @@ from homeApp.views import home
 from scientificApp.views import index
 import scientificApp
 from django.conf.urls import include
+from common.views import article
 
 urlpatterns = [
     path('admin/', admin.site.urls),
     path('',home,name='home'),
+    path('article/<str:id>',article,name='article'),
     path('aboutApp/', include('aboutApp.urls')),
     path('teamApp/', include('teamApp.urls')),
     path('scientific',scientificApp.views.index, name='scientific_index'),