轮播图的实现

目录

轮播图:

前端:

配置

前端项目目录下的终端:
    cnpm install vue-cookies

    cnpm install axios

    cnpm install element-ui

    cnpm install jquery
    cnpm install 

 配置jquery:vue.config.js:
 const webpack = require("webpack");

module.exports = {
    configureWebpack: {
        plugins: [
            new webpack.ProvidePlugin({
                $: "jquery",
                jQuery: "jquery",
                "window.jQuery": "jquery",
                "window.$": "jquery",
                Popper: ["popper.js", "default"]
            })
        ]
    }
};

在main.vue文件 配置:
    import axios from 'axios'
    Vue.prototype.$axios = axios;

    import cookies from 'vue-cookies'
    Vue.prototype.$cookies = cookies;

    import ElementUI from 'element-ui';
    import 'element-ui/lib/theme-chalk/index.css';
    Vue.use(ElementUI);

    import 'bootstrap'
    import 'bootstrap/dist/css/bootstrap.min.css'

banner.vue样式:

<template>
    <div class="banner">
        <el-carousel height="400px">
            <!--<el-carousel-item>- 前端图片展示->
                <!--<router-link to="/">-->
                    <!--<img src="../assets/img/banner1.png" alt="">-->
                <!--</router-link>-->
            <!--</el-carousel-item>-->

            <el-carousel-item v-for="banner in banner_list" :key="banner.title">
                <!--<a :href="banner.link">    后端数据页面展示 跳出本地页面-->
                    <!--<img :src="banner.image" alt="" :title="banner.title">-->
                <!--</a>-->
                <router-link :to="banner.link">
                    <img :src="banner.image" alt="" :title="banner.title">
                </router-link>
            </el-carousel-item>
        </el-carousel>
    </div>
</template>

<script>
    export default {
        name: "Banner",
        data() {
            return {
                banner_list: []  /* 接收数据*/
            }
        },
        create() {
            
            // 直接发送get请求
            // this.$axios.get(this.$settings.base_url + '/home/banners').then(response => {
            //     // console.log(response)
            //     this.banner_list = response.data
            // })
            
            /* 前端发送请求方式--》 后端*/
            this.$axios({
                url: this.$settings.base_url + '/home/banners',
                method: 'get',
                params: {},  /* 参数 ? 数据包*/
                data: {}
            }).themn(response=> {
                this.banner_list = response.data
            }).catch(error => {
                console.log(error.response.data)
            })
        }
    }
</script>

<style scoped>  /*  scoped 独属于改文件的样式配置*/
    .banner {
        height: 400px;
    }

    .banner a {
        display: block;
    }

    .banner img {
        height: 400px;
        /*  设置一个默认的长度 进行页面居中展示 */
        margin-left: calc(50% - 1920px / 2);
    }

    .el-carousel__item {
        /* 设置默认值*/
        min-width: 1200px;
    }

</style>

后端:

views.py:

from rest_framework.viewsets import GenericViewSet
from rest_framework import mixins
from django.conf import settings
from utils.response import Response
from  . import models, serializers

class BannerListViewSet(mixins.ListModelMixin, GenericViewSet):
    queryset = models.Banner.objects.filter(is_delete=False, is_show=True).order_by('-orders').all()[:settings.BANNER_COUNT]
    serializer_class = serializers.BannerModelSerializer

    # 自定义响应结果的格式
    # def list(self, request, *args, **kwargs):
    #     response = super().list(request, *args, **kwargs)
    #     return APIResponse(results=response.data)

urls.py路由:

#子路由:
from django.urls import path,re_path,include
from utils.router import router
from . import views

router.register('banners',views.BannerListViewSet,basename='banner')
urlpatterns = [
    re_path(r'',include(router.urls))
]

import xadmin
xadmin.autodiscover()
from xadmin.plugins import xversion
xversion.register_models()
urlpatterns = [
    path('xadmin/', xadmin.site.urls),

    path('user/', include('user.urls')),
    path('home/', include('home.urls')),

    re_path('^media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT})
]

models.py:

from django.db import models

from utils.model import BaseModel
class Banner(BaseModel):
    title = models.CharField(max_length=64,verbose_name='标题')
    link = models.CharField(max_length=64, verbose_name='链接')
    image = models.ImageField(upload_to='banner', verbose_name='图片')

    class Meta:
        db_table = 'luffy_banner'
        verbose_name_plural = '轮播图'

    def __str__(self):
        return self.title


    
#基表创建: utils/model.py

from django.db import models

class BaseModel(models.Model):
    is_delete = models.BooleanField(default=False, verbose_name='是否删除')
    is_show = models.BooleanField(default=True, verbose_name='是否上线')
    orders = models.IntegerField(default=0, verbose_name='排序顺序')
    created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='最后更新时间')

    class Meta:
        abstract = True

serializers.py:

from rest_framework import serializers
from . import models
class BannerModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Banner
        fields = ('title','link','image')

相关推荐