首页 > 其他分享 >后台主页模块设计

后台主页模块设计

时间:2023-06-28 20:47:38浏览次数:25  
标签:name 主页 models py 模块 import 后台 home class

目录

一、创建home模块

前提:在 luffy 虚拟环境下

1.终端从项目根目录进入apps目录
>: cd luffyapi & cd apps

2.创建app
>: python ../../manage.py startapp home

注册home模块:dev.py

INSTALLED_APPS = [
    # ...
    'rest_framework',
    'home',
]

二、Banner数据表model设计

  • 写一个基表BaseModel
  • 写轮播图表
  • 数据迁移

utils/common_models.py

### 基表:BaseModel##########
# 可以模仿这个类来写,django.contrib.auth.models.AbstractUser
from django.db import models

class BaseModel(models.Model):
    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  # 这个表模型只用来继承,不用来在数据库中生成表

apps/home/models.py

########Banner########
from django.db import models
from utils.common_models import BaseModel


class Banner(BaseModel):
    # 分析字段:id  img图片地址        长传时间  是否删除 是否显示 order
    # 把公共字段抽取到某个基表中,以后要使用,直接继承基表,扩写自己的字段就可以了---> 用过的AbstractUser就是这个原理
    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

数据迁移:在大luffyapi路径下的终端

>: python manage.py makemigrations
>: python manage.py migrate
    
    
# 执行第一条命令后,就会在应用下的migrations包中产生一条迁移记录,记录在py文件中,不会正式的创建表
# 执行第二条命令后,才会真正的创建表,然后在django_migrations中增加一条迁移记录。

三、simpleui后台管理

# 安装
pip install django-simpleui
# 在dev.py的应用中注册
INSTALLED_APPS = [
    'simpleui',
    ...
]

# 创建一个超级用户
python manage.py createsuperuser
Username: admin
Password: lqz12345

# 把自己创建的表Banner注册到后台
# home/admin.py
from django.contrib import admin
from .models import Banner
admin.site.register(Banner)

# 后台中应用名显示中文
# home/apps.py
class HomeConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'home'
    verbose_name = '首页功能'  # 增加这行后,后台中应用名就显示中文


# 录入数据

# 正常在公司中,网站分主站和后台管理
# 后台管理,主要是运营录入数据,使用simpleui

四、轮播图接口

4.1 封装自己的mixin

  • 使用自己封装好的返回格式函数
  • utils/common_mixin.py
from rest_framework.mixins import ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin,  DestroyModelMixin
from utils.common_response import APIResponse


class CommonListModelMixin(ListModelMixin):
    def list(self, request, *args, **kwargs):
        res = super().list(request, *args, **kwargs)
        return APIResponse(data=res.data)


class CommonCreateModelMixin(CreateModelMixin):
    def create(self, request, *args, **kwargs):
        res = super().create(request, *args, **kwargs)
        return APIResponse(data=res.data)  # {code:100,msg:成功,data:{}}


class CommonRetrieveModelMixin(RetrieveModelMixin):
    def retrieve(self, request, *args, **kwargs):
        res = super(CommonRetrieveModelMixin, self).retrieve(request, *args, **kwargs)
        return APIResponse(data=res.data)


class CommonUpdateModelMixin(UpdateModelMixin):
    def update(self, request, *args, **kwargs):
        res = super(CommonUpdateModelMixin, self).update(request, *args, **kwargs)
        return APIResponse(data=res.data)


class CommonDestroyModelMixin(DestroyModelMixin):
    def destroy(self, request, *args, **kwargs):
        res = super().destroy(request, *args, **kwargs)
        return APIResponse(msg='删除成功')

4.2 轮播图接口

视图 home/views.py

# 查询所有 轮播图接口
from rest_framework.viewsets import GenericViewSet
from utils.common_mixin import CommonListModelMixin as ListModelMixin
from .models import Banner
from .serializer import BannerSerializer


class BannerView(GenericViewSet, ListModelMixin):
    # 展示被软删除的,和显示上架的,和根据orders排序
    queryset = Banner.objects.all().filter(is_delete=False, is_show=True).order_by('orders')
    serializer_class = BannerSerializer

路由 urls.py

## 总路由
urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/v1/home/', include('home.urls')),
    # static 默认开启的,后期咱们会开启media文件夹,除此之外的其它文件夹,尽量不要开放,让外部访问
    path('media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT}),

]

分路由 home/urls.py

from .views import BannerView
from rest_framework.routers import SimpleRouter

router = SimpleRouter()
router.register('banner', BannerView, 'banner')
urlpatterns = [
    # path('admin/', admin.site.urls),
]
urlpatterns += router.urls

序列化类 home/serializers.py

from rest_framework import serializers
from . import models


class BannerSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Banner
        # 只返回给前端需要的字段名
        fields = ['id', 'image', 'title', 'link']

接口

http://localhost:8000/home/banners/

4.3 自定义配置文件

# 通过配置文件控制显示多少条轮播图
# 使用步骤
    1 在settings下新建:common_settings.py
    	BANNER_COUNT = 3

    2 在dev.py中加入
        # 导入轮播图设置
        from .common_settings import *

    3 在轮播图接口上,直接导入使用
    class BannerView(GenericViewSet, ListModelMixin):
        queryset = Banner.objects.all().filter(is_delete=False, is_show=True).order_by('orders')[:settings.BANNER_COUNT]
        serializer_class = BannerSerializer

标签:name,主页,models,py,模块,import,后台,home,class
From: https://www.cnblogs.com/zjyao/p/17512510.html

相关文章

  • 自媒体后台搭建 —— 素材图片上传
    一、自媒体后台搭建1、搭建自媒体平台网关:leadnew-wemedia-gateway2、搭建自媒体微服务:leadnews-wemedia-service二、自媒体素材管理图片上传1、如何获得用户信息在自媒体网关过滤器filter中解析token,获取用户id,存入headerspackagecom.heima.wemedia.gateway.filter;......
  • Python time和datetime模块
    Pythontime和datetime模块标准库time与datetime时间的3中格式:时间戳时间戳-->struct_timetime.gmtime(UTC时间)time.localtime(本地时区时间)struct_time()struct_time-->时间戳time.mktimestruct_time-->格式化的字......
  • 【雕爷学编程】Arduino动手做(134)---PCF8574T扩展模块
    7款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 【雕爷学编程】Arduino动手做(133)---LCD1602扩展板模块
    7款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • Git 子模块
    1概览使用Git管理源代码,进行子模块操作时,此文可作为参考(LookupCheat-Sheet)2何时使用submodules合适的场景:子模块代码应独立于其他应用者项目(container/containerproject)。不依赖,高内聚,同一代码库共享于多个应用者项目。代码规模大,若其中某个同样大规模的代码模块长时......
  • 【雕爷学编程】Arduino动手做(132)---KY-027魔术光环模块
    7款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • JavaScript 中模块的导入和导出
    模块简介html文档一般在标签中引入外部js文件<script>标签引入的脚本中创建的变量,都会被注册为window对象下全局变量,这样做会污染全局命名空间这就衍生除了模块化的解决方案,比如CommonJS等,但是这些解决方案都不是JavaScript原生的,直到ES6支持JavaScript模块的使用。......
  • Python之文档测试模块——doctest(转载)
    doctest是python自带的一个模块。doctest有两种使用方式:一种是嵌入到python源码中,另外一种是放到一个独立文件。doctest模块会搜索那些看起来像是python交互式会话中的代码片段,然后尝试执行并验证结果。 1doctest嵌入源码中下面的代码只有一个函数,里面嵌入了两个doctest测试......
  • Python模块之Collections
    collections的常用类型有:计数器(Counter)双向队列(deque)默认字典(defaultdict)有序字典(OrderedDict)可命名元组(namedtuple)使用以上类型时需要导入模块fromcollectionsimport*1.CounterCounter 作为字典(dict)的一个子类用来进行hashtable计数,将元素进行数量统计、计数后......
  • 【雕爷学编程】Arduino动手做(131)---跑马灯矩阵键盘模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......