『Python-Django 网站导航』3.导航数据后端管理应用开发

     阅读:47

项目全文索引

『Python-Django 网站导航』开源项目总览

效果展示

站点大类
在这里插入图片描述

站点分类
在这里插入图片描述
站点信息
在这里插入图片描述

应用创建&配置

应用创建

CMD 命令行创建导航数据应用,并将创建好的应用文件夹移动到 apps 下即可。

cd SiteNavigation
python manage.py startapp DataSettings

应用配置

在 settings.py 中添加应用名称到 INSTALLED_APPS

INSTALLED_APPS = [
	...
    'DataSettings',

其他文件

  • admin.py 由于使用xadmin代替的原有版本的admin,因此改名为 adminx.py
  • test.py 测试执行脚本,可删除。
  • urls.py 新建该文件用于应用路由配置。

模型 models.py

依据项目需求进行开发数据模型应用。

# coding:utf-8
__author__ = 'Mr.数据杨'
__explain__ = '网站应用模型设置'

from django.db import models


# 导航一级分类
class Category(models.Model):
    # 模型私有部分
    name = models.CharField(
        max_length=30,
        verbose_name='导航一级分类', help_text="导航一级分类名称"
    )

    class Meta:
        verbose_name = '文章一级大类管理'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name


# 导航二级栏目
class Item(models.Model):
    # 模型私有部分
    category = models.ForeignKey(
        Category,
        on_delete=models.CASCADE, related_name='CategoryItem',
        verbose_name="导航一级分类", help_text="导航一级分类名称"
    )
    name = models.CharField(
        max_length=30,
        verbose_name="导航二级栏目", help_text="文章二级栏目名称"
    )

    class Meta:
        verbose_name = '文章二级栏目管理'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name


# 导航具体明细
class SiteInfo(models.Model):
    item = models.ForeignKey(
        Item,
        related_name='ArticleInfoItem', on_delete=models.CASCADE,
        verbose_name="导航二级栏目", help_text="文章二级栏目名称"
    )
    name = models.CharField(
        max_length=100, default="",
        verbose_name='网站名称', help_text="网站名称"
    )
    description = models.TextField(
        verbose_name='网站描述', help_text="网站描述"
    )
    url = models.URLField(
        verbose_name='网站连接', help_text="网站连接"
    )
    logo = models.ImageField(
        upload_to='SiteLogo', default='SiteLogo/default.png',
        verbose_name='网站图标', help_text="网站图标",
        null=True, blank=True
    )
    click_num = models.IntegerField(
        verbose_name='点击次数', help_text="点击次数"
    )

    class Meta:
        verbose_name = '站点明细管理'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

管理 adminx.py

依据项目需求进行开发数据模型应用管理。

# -*- coding: utf-8 -*-
__author__ = 'Mr数据杨'
__explain__ = '应用 Adminx 后台管理控制配置'

from .models import *
import xadmin
from xadmin import views


# 全局设置
class BaseSetting(object):
    # 启用后台主题
    enable_themes = True
    # 切换主题模式
    use_bootswatch = True


# 菜单设置
class GlobalSettings(object):
    # 设置站点标题
    site_title = "网站导航后台管理"
    # 设置站点的页脚
    site_footer = "Mr数据杨制作"
    # 设置默认导航菜单折叠
    menu_style = "accordion"

    def get_site_menu(self):
        SiteInfoMenu = {'title': '站点数据管理', 'icon': 'fa fa-file-text', 'menus': (
            {'title': '站点大类', 'icon': 'fa fa-file-o', 'url': self.get_model_url(Category, 'changelist')},
            {'title': '站点分类', 'icon': 'fa fa-file-o', 'url': self.get_model_url(Item, 'changelist')},
            {'title': '站点信息', 'icon': 'fa fa-file-o', 'url': self.get_model_url(SiteInfo, 'changelist')},
        )}
        return (
            SiteInfoMenu,
        )


class CategoryAdmin(object):
    list_display = [
        'name', 'item_count'
    ]
    show_bookmarks = False

    # 统计每个Category下的Item数
    def item_count(self, obj):
        return Item.objects.filter(category=obj).count()

    # 定义统计列的字段名称
    item_count.short_description = "分类数量"


class ItemAdmin(object):
    list_display = [
        'category', 'name', 'site_info_count'
    ]
    show_bookmarks = False

    # 统计每个Item下的文章数量
    def site_info_count(self, obj):
        return SiteInfo.objects.filter(item_id=obj).count()

    # 定义统计列的字段名称
    site_info_count.short_description = "站点数据"


class SiteInfoAdmin(object):
    list_display = [
        'item', 'name', 'description', 'click_num'
    ]
    show_bookmarks = False


xadmin.site.register(views.CommAdminView, GlobalSettings)  # 全局设置加载
xadmin.site.register(views.BaseAdminView, BaseSetting)  # 注册主体风格切换
xadmin.site.register(Category, CategoryAdmin)
xadmin.site.register(Item, ItemAdmin)
xadmin.site.register(SiteInfo, SiteInfoAdmin)

视图 Views.py

依据项目需求进行开发数据模型视图管理。

# coding:utf-8
__author__ = 'Mr.数据杨'
__explain__ = '网站应用模型视图'

from django.shortcuts import render
from django.views.generic.base import View
from .models import *

class HomeIndex(View):
    def get(self, request):
        category_list = Category.objects.all()
        item_list = Item.objects.all()
        data_list = SiteInfo.objects.all()
        return render(request, 'WebStackPage.github.io-master/my_index.html', {
            'category_list': category_list,
            'item_list': item_list,
            'data_list': data_list,
        })

应用路由 urls.py

# coding:utf-8
__author__ = 'Mr.数据杨'
__explain__ = '网站应用模型路由配置'

from django.urls import path
from .views import *

app_name = 'DataSettings'

urlpatterns = [
    path('', HomeIndex.as_view(), name='HomeIndex'),
]

项目路由 urls.py

urlpatterns = [
	......
    path('', include('DataSettings.urls', namespace='DataSettings')),
]

迁移命令

执行常规CMD命令进行项目迁移。

python manage.py makemigrations  # 迁移到我们数据库
python manage.py migrate # 同步到数据库