【一】创建后台主页模块
python ../../manage.py startapp home
【二】创建模型表(轮播图)
luffyCity\luffyCity\utils\common_models.py
from django.db import models
class BaseModel(models.Model):
'''
公共字段创建基表 ---- 其他表也可能用
id img图片地址 上传时间 是否删除 是否显示 显示排序
'''
created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
updated_time = models.DateTimeField(auto_now=True, verbose_name='最后更新时间')
is_delete = models.BooleanField(default=False, verbose_name='是否删除')
is_show = models.BooleanField(default=True, verbose_name='是否上架')
orders = models.IntegerField(verbose_name='优先级')
class Meta:
abstract = True # 这个表模型只用来继承,不用来在数据库中生成表
luffyCity\luffyCity\apps\home\models.py
from django.db import models
from luffyCity.utils.common_models import BaseModel
# Create your models here.
class Banner(BaseModel):
title = models.CharField(max_length=16, unique=True, verbose_name='名称')
image = models.ImageField(upload_to='banner', verbose_name='图片')
# 点击图片,跳转到的路径
# 前端跳转的地址: 前端路由/完整的http链接
link = models.CharField(max_length=64, verbose_name='跳转链接')
info = models.TextField(verbose_name='详情') # 也可以用详情表,宽高出处
class Meta:
db_table = 'luffy_banner'
verbose_name_plural = '轮播图表'
def __str__(self):
return self.title
【三】注册APP并执行数据库迁移
python ../../manage.py makemigrations
python ../../manage.py migrate
【四】simpleui后台管理
【1】录入数据:
- 在后台管理中,录入数据是一项重要任务。
- 通过使用simpleui,您可以在后台管理系统的界面上方便地进行数据录入操作。
- 通常情况下,您需要登录到后台管理系统,并选择相应的数据录入模块。
- 根据您的需求,选择合适的表单或页面,然后填写所需的数据信息。
- 这些信息可能包括文本、数字、日期等各种类型的数据。
- 填写完毕后,可以保存数据并进行进一步的处理或展示。
【2】主站和后台管理:
- 在公司的网站中,通常会分为主站和后台管理两部分。
- 主站是向外部用户提供产品、服务和信息的界面,用于展示公司的形象和吸引客户。
- 后台管理则是为运营人员提供的具有控制权和权限管理的系统,用于管理和操作网站的各个功能和数据。
- 后台管理系统往往有更多的功能和权限,包括数据录入、编辑、删除、统计分析等。
- 而主站则是给予外部用户访问和使用的界面,不涉及敏感操作和权限管理。
【3】Simpleui后台管理:
-
Simpleui是一款简单易用的后台管理系统框架。
-
它基于Python的Django框架开发,并提供了一套美观、高效的用户界面。通过使用Simpleui,您可以快速搭建一个功能齐全、易于维护的后台管理系统。
-
Simpleui提供了丰富的组件和插件,可以方便地进行数据录入、表单校验、数据展示、样式定制等操作。
-
同时,Simpleui还支持响应式布局,可以适应不同屏幕尺寸的设备,提供更好的用户体验。
-
在使用Simpleui进行后台管理时,您可以根据具体需求进行配置和扩展。
-
例如,您可以创建自定义的数据模型,定义字段名称、类型和验证规则。
-
您还可以创建页面,用于展示和处理特定的数据信息。
-
Simpleui还提供了权限管理功能,可以根据用户角色和权限设置不同的访问权限。
-
通过Simpleui,您可以灵活地管理网站的各项功能和数据,提高运营效率和数据管理的准确性。
【4】安装Simpleui框架
-
需要以下命令:
- 首先,确保您的Python已经安装并配置好了环境。
- 打开终端(Windows用户可使用命令提示符或PowerShell),输入以下命令安装Simpleui:
pip install django-simpleui
- 执行上述命令后,pip会自动下载Simpleui框架及其所依赖的库,并进行安装。
- 等待安装完成后,即可在您的Django项目中开始使用Simpleui的功能。
【5】APP注册
INSTALLED_APPS = [
# simpleui 后台管理
'simpleui',
]
【6】切换时区和语言
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = False
【7】创建超级管理员并登录后台
python ../../manage.py createsuper
用户名: admin
电子邮件地址:
Warning: Password input may be echoed.
Password: 521
【8】模型表注册admin
from django.contrib import admin
from luffyCity.apps.home.models import Banner
# Register your models here.
@admin.register(Banner)
class UserAdmin(admin.ModelAdmin):
list_display = ['title', 'image', 'link', 'info', 'created_time', 'updated_time', 'is_delete', 'is_show',
'orders']
- 切换后台显示 home ---> 首页功能
luffyCity\luffyCity\apps\home\apps.py
from django.apps import AppConfig
class HomeConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'luffyCity.apps.home'
verbose_name = '首页功能'
【五】轮播图接口
【1】路由分发
- 主路由分发到APP路由
from django.contrib import admin
from django.urls import path, include
from django.views.static import serve
from django.conf import settings
urlpatterns = [
# 后台首页接口
path('api/v1/home/', include('luffyCity.apps.home.urls')),
]
- app路由自动注册路由
from rest_framework.routers import SimpleRouter
from luffyCity.apps.home.views import BannerView
router = SimpleRouter()
router.register('banner', BannerView, 'banner')
urlpatterns = [
]
urlpatterns += router.urls
【2】主视图
luffyCity\luffyCity\apps\home\views.py
from django.shortcuts import render
from rest_framework.viewsets import GenericViewSet
from django.conf import settings
from luffyCity.apps.home.models import Banner
from luffyCity.apps.home.serializers.Banner_serializer import BannerSerializer
from luffyCity.utils.common_mixin import CommonListModelMixin
class BannerView(GenericViewSet, CommonListModelMixin):
# 过滤出没有被删除 + 可以显示 + 优先级排序
queryset = Banner.objects.all().filter(is_delete=False, is_show=True).order_by('orders')[:settings.BANNER_COUNT]
serializer_class = BannerSerializer
【补充】自定义响应数据格式
luffyCity\luffyCity\utils\common_response.py
# -*-coding: Utf-8 -*-
# @File : common_response .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time:2023/8/8
from rest_framework.response import Response
class CommonResponse(Response):
def __init__(self, code=100, msg="请求成功", status=None, headers=None, **kwargs):
data = {"code": code, "msg": msg}
# kwargs 可能会携带数据 {token:'...'}
if kwargs:
data.update(kwargs)
# 调用父类(Response)的 __init__ 方法进行初始化
super().__init__(data=data, status=status, headers=headers)
【补充】自定义banner序列化类
luffyCity\luffyCity\apps\home\serializers\Banner_serializer.py
# -*-coding: Utf-8 -*-
# @File : Banner_serializer .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time:2023/8/8
from rest_framework import serializers
from luffyCity.apps.home.models import Banner
class BannerSerializer(serializers.ModelSerializer):
class Meta:
model = Banner
fields = ['id', 'title', 'image', 'link']
【补充】自定义视图类
luffyCity\luffyCity\utils\common_mixin.py
# -*-coding: Utf-8 -*-
# @File : common_mixin .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time:2023/8/8
from rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin, \
DestroyModelMixin
from luffyCity.utils.common_response import CommonResponse
class CommonListModelMixin(ListModelMixin):
def list(self, request, *args, **kwargs):
result = super().list(request, *args, **kwargs)
return CommonResponse(data=result.data)
class CommonCreateModelMixin(CreateModelMixin):
def create(self, request, *args, **kwargs):
result = super().create(request, *args, **kwargs)
return CommonResponse(data=result.data) # {code:100,msg:成功,data:{}}
class CommonUpdateModelMixin(UpdateModelMixin):
def update(self, request, *args, **kwargs):
result = super(CommonUpdateModelMixin, self).update(request, *args, **kwargs)
return CommonResponse(data=result.data)
class CommonRetrieveModelMixin(RetrieveModelMixin):
def retrieve(self, request, *args, **kwargs):
result = super(CommonRetrieveModelMixin, self).retrieve(request, *args, **kwargs)
return CommonResponse(data=result.data)
class CommonDestroyModelMixin(DestroyModelMixin):
def destroy(self, request, *args, **kwargs):
result = super().destroy(request, *args, **kwargs)
return CommonResponse(msg='删除成功')
【补充】自定义banner切片
luffyCity\luffyCity\settings\dev.py
###############轮播图切片配置文件#################
from luffyCity.utils.common_settings import *
luffyCity\luffyCity\utils\common_settings.py
# -*-coding: Utf-8 -*-
# @File : common_settings .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time:2023/8/8
BANNER_COUNT = 4
【补充】表模型继承
- 表模型继承是指在实现数据库表时,通过继承的方式使得子模型能够继承父模型的字段和方法。
- 在给出回答之前,我先解释一下上述内容中提到的几个概念。
【1】ModelMixin:
-
ModelMixin 是一个 Mixin 类,它定义了一些通用的方法,可以被其他表模型继承并使用。
-
其中包括
to_dict
方法,用于将表模型对象序列化为字典形式的数据。 -
通过在继承类的定义中添加
ModelMixin
,子类就可以直接使用to_dict
方法进行对象序列化操作。
【2】to_dict() 方法:
-
to_dict
方法是ModelMixin
类中定义的方法,用于将表模型对象序列化为字典形式的数据。 -
该方法允许通过参数指定只序列化需要的字段,可以提高性能并避免暴露不必要的数据。
【3】开源项目 Spug:
-
Spug 是一个开源的运维平台,由国内知名技术团队开发并维护。
-
其中的
ModelMixin
类提供了一套常用的方法,方便开发者在表模型中使用。
【4】表模型继承的应用场景和使用方法:
-
在开发过程中,经常会遇到多个表模型之间存在相似的字段和方法。
-
此时,我们可以将这些共享的属性和方法抽象到一个父类中,然后通过继承方式让子类继承这些属性和方法,以实现代码复用和减少冗余。
-
在上述补充内容中提到的示例中,通过继承
ModelMixin
类,子类便可以使用to_dict
方法将对象序列化为字典。 -
其中的参数
a=['id','name']
表示只序列化 ID 和名称字段,通过指定需要的字段可以避免暴露不必要的数据,提高性能。
【5】总结来说
- 表模型继承是一种通过抽象共享属性和方法到父类的方式,使得子类可以继承这些属性和方法,提高代码复用性和减少冗余。
- 具体到示例中的
ModelMixin
类,它包含了to_dict
方法,可以用于将表模型对象序列化为字典形式的数据。