• luffy项目后端轮播图接口


    后台主页功能

    需求

    根据原型图,分析出首页需要配合俩接口
    1. 轮播图接口(要写)
      • 查询所有轮播图
    2. 推荐课程接口(暂时先不写)
    设计表
    • 轮播图表:Banner
    轮播图接口
    • 查询所有轮播图

    轮播图表

    写一个公共表模型且只用于继承
    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  # 这个表,只用来继承,不会再数据库生成表
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    轮播图表
    from utils.common_model import BaseModel
    class Banner(BaseModel):
        title = models.CharField(max_length=16, unique=True, verbose_name='名称')
        image = models.ImageField(upload_to='banner', verbose_name='图片')  # 地址,存放轮播图的地址
        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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    轮播图接口

    视图类
    from rest_framework.mixins import ListModelMixin
    from rest_framework.viewsets import GenericViewSet
    from .models import Banner
    from .serializer import BannerSerializer
    from django.conf import settings
    
    class BannerView(GenericViewSet, ListModelMixin):
        # 按orders排序,且只显示多少张
        queryset = Banner.objects.filter(is_delete=False, is_show=True).order_by('orders')[:settings.BANNER_COUNT]
        serializer_class = BannerSerializer
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    序列化类
    from .models import Banner
    from rest_framework import serializers
    
    class BannerSerializer(serializers.ModelSerializer):
        class Meta:
            model = Banner
            fields = ['id', 'image', 'link']
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    路由
    from .views import BannerView
    from rest_framework.routers import SimpleRouter
    
    router = SimpleRouter()
    router.register('banner', BannerView, 'banner')
    
    urlpatterns = []
    urlpatterns += router.urls
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    路由分发
    from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('api/v1/home/', include('luffy01.apps.home.urls'))
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    设置
    # 写一个user专用设置文件
    BANNER_COUNT=3
    
    # 在设置文件中导入user设置
    from .user_settings import *
    
    • 1
    • 2
    • 3
    • 4
    • 5

    轮播图显示接口

    显示轮播图需要一个图片地址接口,和图片点击的跳转

    1. 需要将上传的图片全保存在media文件夹中
      • 在项目中创建一个media文件夹
    2. 开放media文件夹,和图片的url地址
      • 在配置文件中
      MEDIA_ROOT = os.path.join(BASE_DIR,'media')
      MEDIA_URL = 'media/'
      # 取出的文件地址,拼接上media这个目录
      # http://127.0.0.1:8000/media/banner/banner1.png
      
      • 1
      • 2
      • 3
      • 4
    3. 写图片路由
      就可以通过图片地址访问图片
      from django.views.static import serve
      from django.conf import settings
      
      urlpatterns = [
          path('media/', serve, {'document_root': settings.MEDIA_ROOT})
      ]
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    4. 添加轮播图图片
      • 安装admin美化模块: pip install django-simpleui,并在apps中注册
      • 创建一个超级用户,后台登录:python manage.py createsuperuser
      • 在admin中注册轮播图表,在admin文件夹中
        from django.contrib import admin
        from .models import Banner
        admin.site.register(Banner)
        
        • 1
        • 2
        • 3
      • 在admin后台管理中,轮播图表中添加图片就会自动保存在media文件夹中
  • 相关阅读:
    STL算法 ——函数对象(仿函数)【仿函数、谓词、内建函数对象、适配器】
    Vue3+vite+cesium环境搭建
    Linux C/C++异常处理方法
    Java Collections.list()方法具有什么功能呢?
    C++ 初识STL
    《性能之巅第2版》阅读笔记(二)--CPU监测
    新手学PCB画板选什么软件
    【HMS core】【FAQ】HMS Toolkit典型问题合集1
    【周赛+双周赛20220904】T4
    java保留两位小数4种方法
  • 原文地址:https://blog.csdn.net/qq_44779250/article/details/133798812