• 头部组件、尾部组件、轮播图接口、轮播图组件、git的使用


    ## 1 项目头部组件

    ### 1.1 路由跳转的方式

    ```python
    #html中路由跳转
    <router-link to="/">
    <img src="../assets/img/head-logo.svg" alt="">
    </router-link>
    #js中控制路由跳转
    this.$router.push('/');

    ```

    ### 1.2 头部组件vue代码

    ```python
    # 在components内新建Head.vue
    <template>
    <div class="header">
    <div class="slogan">
    <p>老男孩IT教育 | 帮助有志向的年轻人通过努力学习获得体面的工作和生活</p>
    </div>
    <div class="nav">
    <ul class="left-part">
    <li class="logo">
    <router-link to="/">
    <img src="../assets/img/head-logo.svg" alt="">
    </router-link>
    </li>
    <li class="ele">
    <span @click="goPage('/free-course')" :class="{active: url_path === '/free-course'}">免费课</span>
    </li>
    <li class="ele">
    <span @click="goPage('/actual-course')" :class="{active: url_path === '/actual-course'}">实战课</span>
    </li>
    <li class="ele">
    <span @click="goPage('/light-course')" :class="{active: url_path === '/light-course'}">轻课</span>
    </li>
    </ul>

    <div class="right-part">
    <div>
    <span>登录</span>
    <span class="line">|</span>
    <span>注册</span>
    </div>
    </div>
    </div>
    </div>

    </template>

    <script>

    export default {
    name: "Header",
    data() {
    return {
    url_path: sessionStorage.url_path || '/',
    }
    },
    methods: {
    goPage(url_path) {
    // 已经是当前路由就没有必要重新跳转
    if (this.url_path !== url_path) {
    this.$router.push(url_path);
    }
    sessionStorage.url_path = url_path;
    },
    },
    created() {
    sessionStorage.url_path = this.$route.path;
    this.url_path = this.$route.path;
    }
    }
    </script>

    <style scoped>
    .header {

    box-shadow: 0 0 5px 0 #aaa;
    }

    .header:after {
    content: "";
    display: block;
    clear: both;
    }

    .slogan {

    height: 40px;
    }

    .slogan p {
    1200px;
    margin: 0 auto;
    color: #aaa;
    font-size: 13px;
    line-height: 40px;
    }

    .nav {

    user-select: none;
    1200px;
    margin: 0 auto;

    }

    .nav ul {
    padding: 15px 0;
    float: left;
    }

    .nav ul:after {
    clear: both;
    content: '';
    display: block;
    }

    .nav ul li {
    float: left;
    }

    .logo {
    margin-right: 20px;
    }

    .ele {
    margin: 0 20px;
    }

    .ele span {
    display: block;
    font: 15px/36px '微软雅黑';
    border-bottom: 2px solid transparent;
    cursor: pointer;
    }

    .ele span:hover {
    border-bottom-color: orange;
    }

    .ele span.active {
    color: orange;
    border-bottom-color: orange;
    }

    .right-part {
    float: right;
    }

    .right-part .line {
    margin: 0 10px;
    }

    .right-part span {
    line-height: 68px;
    cursor: pointer;
    }
    </style>
    ```

    ### 1.3 配置全局css和setting

    ```python
    # 在main.js中配置
    // 配置全局样式 @ 符号,代指src路径
    import '@/assets/css/global.css'
    // 配置全局自定义设置
    import settings from '@/assets/js/settings'
    Vue.prototype.$settings = settings;
    // 在所有需要与后台交互的组件中:this.$settings.base_url + '再拼接具体后台路由'

    # 在assets下的css中加入global.css
    /* 声明全局样式和项目的初始化样式 */
    body, h1, h2, h3, h4, h5, h6, p, table, tr, td, ul, li, a, form, input, select, option, textarea {
    margin: 0;
    padding: 0;
    font-size: 15px;
    }

    a {
    text-decoration: none;
    color: #333;
    }

    ul {
    list-style: none;
    }

    table {
    border-collapse: collapse; /* 合并边框 */
    }


    # 在assets下的js中加入settings.js
    export default {
    base_url: 'http://127.0.0.1:8000'
    }

    ```

    ### 1.4 前台配置

    ```python
    # 安装
    cnpm install axios
    cnpm install vue-cookies
    cnpm install element-ui
    cnpm install jquery
    cnpm install bootstrap@3

    #在main.js中配置
    #axios配置
    import axios from 'axios'
    Vue.prototype.$axios = axios;
    # vue-cookies配置
    import cookies from 'vue-cookies'
    Vue.prototype.$cookies = cookies;
    # ElementUI的配置
    import ElementUI from 'element-ui';
    import 'element-ui/lib/theme-chalk/index.css';
    Vue.use(ElementUI);
    # bootstrap配置
    import 'bootstrap'
    import 'bootstrap/dist/css/bootstrap.min.css'

    # 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"]
    })
    ]
    }
    };

    ```



    ## 2 项目尾部组件

    Footer.vue

    ```html
    <template>
    <div class="footer">
    <ul>
    <li>关于我们</li>
    <li>联系我们</li>
    <li>商务合作</li>
    <li>帮助中心</li>
    <li>意见反馈</li>
    <li>新手指南</li>
    </ul>
    <p>Copyright © luffycity.com版权所有 | 京ICP备17072161号-1</p>
    </div>
    </template>

    <script>
    export default {
    name: "Footer"
    }
    </script>

    <style scoped>
    .footer {
    100%;
    height: 128px;
    background: #25292e;
    color: #fff;
    }

    .footer ul {
    margin: 0 auto 16px;
    padding-top: 38px;
    810px;
    }

    .footer ul li {
    float: left;
    112px;
    margin: 0 10px;
    text-align: center;
    font-size: 14px;
    }

    .footer ul::after {
    content: "";
    display: block;
    clear: both;
    }

    .footer p {
    text-align: center;
    font-size: 12px;
    }
    </style>
    ```



    ## 3 轮播图接口

    ```python
    ####1 urls.py
    from rest_framework.routers import SimpleRouter
    router=SimpleRouter()
    router.register('banner',views.BannerView,'banner')
    urlpatterns = [
    # path('banner/', views.BannerView.as_view()),
    path('', include(router.urls)),
    ]

    ####2 views.py
    from django.conf import settings
    class BannerView(GenericViewSet,ListModelMixin):
    # 无论有多少条待展示的数据,最多就展示3条
    queryset = models.Banner.objects.filter(is_delete=False,is_show=True).order_by('display_order')[:settings.BANNER_COUNTER]
    serializer_class = serializer.BannerModelSerilaizer

    ### 3 serializer.py
    from rest_framework import serializers
    from . import models
    class BannerModelSerilaizer(serializers.ModelSerializer):
    class Meta:
    model=models.Banner
    fields=['name','link','img']

    ### 4 models.py
    from utils.models import BaseModel


    class Banner(BaseModel):
    name=models.CharField(max_length=32,verbose_name='图片名字')
    img=models.ImageField(upload_to='banner',verbose_name='轮播图',help_text='图片尺寸必须是:3840*800',null=True)
    link=models.CharField(max_length=32,verbose_name='跳转连接')
    info=models.TextField(verbose_name='图片简介')
    # type=models.IntegerField(choices=)

    def __str__(self):
    return self.name
    ####5 utils/models.py

    class BaseModel(models.Model):
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='最后更新时间')
    is_delete = models.BooleanField(default=False, verbose_name='是否删除')
    is_show = models.BooleanField(default=True, verbose_name='是否展示')
    display_order = models.IntegerField()
    class Meta:
    abstract=True # 一定不要忘了

    ### 6 settings/const.py
    # 首页轮播图个数
    BANNER_COUNTER=3

    #### 7 settings/dev.py
    from .const import *
    ```

    ## 4 轮播图组件

    Banner.vue

    ```python
    <template>

    <div id="banner">

    <el-carousel height="400px">
    <el-carousel-item v-for="item in banner_list">
    <!--<img src="../assets/img/banner1.png" alt="">-->
    <router-link :to="item.link">
    <img :src="item.img" :alt="item.name">
    </router-link>

    </el-carousel-item>
    </el-carousel>
    </div>

    </template>

    <script>
    export default {
    name: "Banner",
    // data:function(){},
    data() {
    return {
    banner_list: []
    }
    },
    created() {
    //当banner组件一创建,就向后台发请求,拿回轮播图数据
    this.$axios.get(this.$settings.base_url + '/home/banner/').then(response => {
    console.log(response.data)
    this.banner_list=response.data
    }).catch(error => {
    })
    },

    }
    </script>

    <style scoped>
    .el-carousel__item {
    height: 400px;
    min- 1200px;
    }

    .el-carousel__item img {
    height: 400px;
    /*margin-left: 20px;*/
    /*margin-left: calc(50% - 1920px / 2);*/
    }
    </style>
    ```

    前端路由配置

    ```python
    const routes = [
    {
    path: '/',
    name: 'Home',
    component: Home
    },
    {
    path: '/free-course',
    name: 'FreeCourse',
    component: FreeCourse
    }, {
    path: '/light-course',
    name: 'LightCourse',
    component: LightCourse
    }, {
    path: '/actual-course',
    name: 'ActualCourse',
    component: ActualCourse
    },

    ]
    ```



    ## 5 git的使用

    ```python
    #1 协同开发,版本管理
    #2 svn(集中式管理),git(分布式管理)
    #3 git装完,既有客户端,又有服务的
    #4 git工作流程
    -工作区,暂存区,版本库
    #5 远程仓库:github,码云,公司内部(gitlab)

    # 6 安装:一路下一步
    # 7 右键--git bash here

    # 8 git 命令
    -初始化:git init 文件夹名
    -初始化:git init #当前路径全被管理

    -git status
    -git add a.txt # 把a提交到暂存区
    -git add .
    -git commit -m '注释,我新增了a' # 把暂存区的所有都提交到版本库
    -需要增加作者信息
    git config --global user.email "lqz@qq.com"
    git config --global user.name "lqz"

    git config user.email "egon@qq.com"
    git config user.name "egon"

    -把a的新增提交到版本管理
    -新建b,在a中新增一行
    -git checkout . # 回复到提交版本的位置,a是空的,b没有被git管理,所有,是什么样,还是什么样
    -git log # 查看版本管理的日志
    -git reflog # 查看日志,条数更多,内容更少
    -git reset --hard 版本号
    # 红色表示未被管理
    # 绿色表示提交到暂存区了

    # 忽略文件
    -空文件夹不被管理
    -指定某些文件或者文件夹不被git管理
    -在项目根路径,跟.git文件夹一个路径,新建.gitignore.,在里面配置
    - 语法:
    # 号是注释,没有用
    文件夹名字,表示文件夹忽略,不被管理
    /dist 表示根路径下的dist文件夹,不被管理
    *.py 表示后缀名为py的文件,都被忽略
    *.log*
    # 分支操作
    -查看分支 git branch 查看所有分支,分支是绿的,表示在当前分支上
    -创建分支 git branch dev
    -创建并切换到 git checkout -b dev
    -删除分支 git branch -d dev
    -切换分支 git checkout dev
    -合并分支 git merge 分支名 # 把dev分支合并到master分支:切换到master分支,执行合并dev分支的命令


    ```
  • 相关阅读:
    C#设计模式总结
    【23】备忘录模式(Memento Pattern)
    【22】访问者模式(Visitor Pattern)
    mycat 分库
    mysql的存储过程
    mysql的视图
    mysql的索引
    mysql权限操作
    mysql事务操作
    mysql常用函数
  • 原文地址:https://www.cnblogs.com/0B0S/p/13618043.html
Copyright © 2020-2023  润新知