luffy-04

2023-05-16

这里写目录标题

  • 一.昨日回顾
  • 二.今日内容
    • 1.路飞项目使用xadmin
    • 2.首页轮播图接口
      • #① 轮播图表
      • #② 视图类(轮播图数量4,通过配置实现)
      • #③ 前端对接
      • #④ 后续:接口缓存
    • 3.git的使用
      • 3.1git的工作流程
    • 4.git分支
      • git提交代码出现冲突的2种情况

一.昨日回顾

1 vue项目开发,单页面开发,新建一个组件,每个组件有三部分:template,script,style
2 页面组件,小组件 xx.html--->yy.html
	-页面组件--->页面组件
3 vue-router实现页面组件跳转
	-配置:(路径跟组件对应关系)
	{
            path: '/home',
            name: 'Home',
            component: Home
    	}
	-js控制:this.$router.push('/home')
	-html模板中:
	<router-link to="/actual-course">
                <button class="btn btn-danger">点我跳转</button>
            </router-link>
4 js中的导入和导出
	-import 别名 from 'axios'
	-import 别名 from '../components/Banner'
	-import settings from '@/assets/js/settings'
	-Vue.prototype.$settings=settings;
	-this.$settings.base_url

	-导出
	export default {
        base_url: 'http://127.0.0.1:8000',
    }
5 主页组件--->路由是 /
	使用了头部组件,轮播组件,尾部组件
6 头部组件
7 尾部组件
8 轮播图组件
9 跨域问题
	-同源策略?
	-跨域问题是什么?
	-前端处理(使用代理)
	-后端处理,使用CORS(跨域资源共享),在响应头中加东西
	-简单请求,非简单请求
10 处理跨域我们采用的方式
	-自己写(写一个中间件) flask中
	-django-cors-headers:只能用在django中
	-前端使用代理
	vue.config.js文件中
	
	module.exports = {
        devServer: {
            proxy: {
                '/ajax': {
                    target: 'https://m.maoyan.com/',
                    changeOrigin: true
                },
            }
        }
    };

二.今日内容

1.路飞项目使用xadmin

1 公司项目,有前台(主站),后台(xadmin)
2 使用步骤

#1 安装:luffy虚拟环境下
pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2
#2 注册app:dev.py
INSTALLED_APPS = [
    # ...
    # xadmin主体模块
    'xadmin',
    # 渲染表格模块
    'crispy_forms',
    # 为模型通过版本控制,可以回滚数据
    'reversion',
]
xadmin:需要自己的数据库模型类,完成数据库迁移
python manage.py makemigrations
python manage.py migrate
设置主路由替换掉admin:主urls.py

#3 xadmin的依赖
import xadmin
xadmin.autodiscover()
# xversion模块自动注册需要版本控制的 Model
from xadmin.plugins import xversion
xversion.register_models()
urlpatterns = [
    # ...
    path(r'xadmin/', xadmin.site.urls),
]
创建超级用户:大luffyapi路径终端

#4 在项目根目录下的终端
python manage.py createsuperuser
#5  账号密码设置:admin | Admin123
完成xadmin全局配置:新建home/adminx.py

#6 home/adminx.py
# xadmin全局配置
import xadmin
from xadmin import views

class GlobalSettings(object):
    """xadmin的全局配置"""
    site_title = "路飞学城"  # 设置站点标题
    site_footer = "路飞学城有限公司"  # 设置站点的页脚
    menu_style = "accordion"  # 设置菜单折叠
xadmin.site.register(views.CommAdminView, GlobalSettings)

2.首页轮播图接口

#① 轮播图表

Banner数据表model设计

### utils/models.py
from django.db import models
# 轮播图,课程。。。继承它
class BaseModel(models.Model):
    is_delete = models.BooleanField(default=False, verbose_name='是否删除')
    is_show = models.BooleanField(default=False, verbose_name='是否展示')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    order = models.IntegerField(verbose_name='顺序')

    class Meta:  # 不在数据库生成
        abstract = True

### home/models.py
from django.db import models

from utils.models import BaseModel


class Banner(BaseModel):
    # 设计表可以先设计这几个,后期是可以动的
    name = models.CharField(max_length=32,verbose_name='图片名')
    link = models.CharField(max_length=32)  #
    # 轮播图的长和宽必须是固定的
    img = models.ImageField(upload_to='banner', blank=False, null=False,verbose_name='上传图片',help_text='图片长宽固定的')

    def __str__(self):
        return self.name
    class Meta:
        db_table='luffy_banner'
        verbose_name_plural='轮播图'

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

>: python manage.py makemigrations
>: python manage.py migrate

注册home模块:dev.py

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

#② 视图类(轮播图数量4,通过配置实现)

### home/serializer.py
from rest_framework import serializers
from . import models

class BannerModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Banner
        fields = ['id','name', 'link', 'img']

### home/views.py
from django.shortcuts import render
from . import models
from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import ListModelMixin
# GenericViewSet:自动生成路由,配置两条(queryset,serialzer)
# ListModelMixin:list
from . import serializer
from django.conf import settings

class BannerView(GenericViewSet, ListModelMixin):
    queryset = models.Banner.objects.filter(is_delete=False, is_show=True).order_by('order')[:settings.BANNER_SIZE]
    serializer_class = serializer.BannerModelSerializer

### home/urls.py
from django.urls import path, re_path, include
# 使用相对导入
from . import views
# 自动生成路径
from rest_framework.routers import SimpleRouter

router = SimpleRouter()

router.register('banner', views.BannerView)

urlpatterns = [
    path('', include(router.urls)),  # 方式一
]

# urlpatterns+=router.urls  # 方式二

### settings/user_settings.py
BANNER_SIZE=4

### settings/dev.py
from .user_settings import *

## 接口为:
http://localhost:8000/home/banner/

在xadmin中录入banner数据
在这里插入图片描述

#③ 前端对接

<template>
    <div>
        <el-carousel height="400px">
            <el-carousel-item v-for="item in img_list" :key="item.id">
              <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 () {
    return {
      img_list: []
    }
  },
  mounted () {
    this.$axios.get(this.$settings.base_url + '/home/banner/').then(res => {
      console.log(res.data)
      this.img_list = res.data
    })
  }
}
</script>

<style scoped>
  .el-carousel__item {
        height: 400px;
        min-width: 1200px;
    }
   .el-carousel__item img {
        height: 400px;
        margin-left: calc(50% - 1920px / 2);
    }
</style>

#④ 后续:接口缓存

在这里插入图片描述

<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 {
                //sessionStorage中有url_path就使用它,没有就是 /
                url_path: sessionStorage.url_path || '/',
            }
        },
        methods: {
            goPage(url_path) {
                // 已经是当前路由就没有必要重新跳转
                if (this.url_path !== url_path) {
                    //js控制路由跳转
                    this.$router.push(url_path);
                }
                //把当前路径加入到了sessionStorage
                sessionStorage.url_path = url_path;

            },
        },
        // created() {
        //     sessionStorage.url_path = this.$route.path;
        //     this.url_path = this.$route.path;
        // }
    }
</script>

<style scoped>
    .header {
        background-color: white;
        box-shadow: 0 0 5px 0 #aaa;
    }

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

    .slogan {
        background-color: #eee;
        height: 40px;
    }

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

    .nav {
        background-color: white;
        user-select: none;
        width: 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>

3.git的使用

1 版本管理工具(git,svn)
2 安装客户端

3.1git的工作流程

1 工作区:工作的目录,文件夹下,放一些文件,文件中写内容
2 暂存区:工作区的更改,提交到暂存区(在暂存区临时存储)
3 版本库:本地文件,内容变更记录
4 git相关操作(一堆命令)
	-git init  # 初始化仓库,把当前路径,被git管理起来
	-git init a  # 创建出一个文件夹,该文件夹被git管理(.git隐藏文件)
	-git status  # 查看状态
		-红色:更改没有被提交到暂存区
		-绿色:更改被提交到暂存区,但是没有被提交到版本库
	# 提交到暂存区
	-git add a.txt  #把a.txt提交到暂存区(git add .)
	-git add .  #把当前路径下所有更改,提交到暂存区
	-git reset . #把提交到暂存区的,拉回到工作区(很少用)
	# 从暂存区提交到版本库(不能从工作区直接提交到版本库)
	-要往版本库提变更,需要先配置用户
	# 全局配置(用户家路径记录:.gitconfig)
	-git config --global user.email "lqz@qq.com"
	-git config --global user.name "lqz"
	# 局部配置(当前路径下配置文件中记录:/.git/config)
	-git config user.email "egon@qq.com"
	-git config user.name "egon"
	# 从暂存区提交到版本库(必须加注释,不加注释提交不上去)
	-git commit -m '注释一定要加,并且有意义'
	# 查看log
	-git log  # 看到版本库中谁提交了什么,写了什么注释,在什么时间,每个版本都有一个id号
	-git reflog  #精简(详细展示)
	# 查看时间点之前|之后的日志:
	>: git log --after 2018-6-1
    >: git log --before 2018-6-1
    >: git reflog --after 2018-6-1
    >: git reflog --before 2018-6-1
    #查看指定开发者日志
    >: git log --author author_name
    >: git reflog --author author_name
    # 回滚(回滚到版本管理的最新的位置)
    -git checkout .   

在这里插入图片描述

4.git分支

1 分支查看:git branch  # 绿色表示当前所在分支
2 分支创建:git branch dev # 创建分支的代码,基于master创建出来的,代码现在跟master一样
	-在那个分支上创建分支,目前新分支和所在分支代码一样
3 分支删除:git branch -d dev
4 切换分支 :git checkout dev
5 分支合并
    git merge 分支名
    把dev分支合并到master分支:切换到master分支,执行合并dev分支的命令
    
6 创建并切换到某个分支(两部并作一步)
	git checkout -b 分支名

在这里插入图片描述

git提交代码出现冲突的2种情况

分支合并
在同一条分支上,你和你的同事改了同一个文件的同一段代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

luffy-04 的相关文章

随机推荐

  • OPi5 香橙派5 安卓12 隐藏大屏模式下任务栏

    记录一下 原版安卓系统在检测到副屏 xff0c 会进入大屏模式 xff0c 屏幕底下有个难看又占地方的任务栏 以下是隐藏的方法 xff0c 在所有界面都会隐藏 xff0c 包括三个虚拟按键 不过 xff0c 用其他APP仍然可以调用包括最近
  • 无人机飞行控制基础

    坐标系统 描述无人机的运动依赖于无人机的位置以及它的方向 常见的主要有两种坐标系统 xff1a 无人机坐标系和大地坐标系 无人机坐标系 无人机坐标系是相对于无人机自身的坐标系统 如下图 坐标原点位于无人机质心 xff0c 三个坐标轴互相垂直
  • socketcan_bridge 包 设置多路CAN口 小记

    参考链接 xff1a socketcan bridge ROS Wiki 基于ROS 43 CANopen的SocketCAN驱动在Ubuntu下的应用说明 SzZhangfq的博客 CSDN博客 ros socketcan socketc
  • 你知道几个中文编程语言,快来瞧瞧这些有趣的中文编程语言。

    提到编程语言 xff0c 我们所了解的也是比较广为人知的一些主流编程语言 xff0c 如Java C C 43 43 Python PHP等 那除了这些编程语言 xff0c 你有了解过中文编程语言吗 xff1f 如果没有 xff0c 那今天
  • Win10连接无线“需要执行操作”或无网络问题的解决方法。

    转载自品略图书馆 http www pinlue com article 2020 03 2800 3510060445349 html 最近这几天有用户反馈Win10系统连接网络出现异常的问题 xff0c 表现为连接到无线网络WIFI之后
  • Excel怎么比较两列文本是否相同?

    转载自品略图书馆 http www pinlue com article 2020 05 2215 1410586873210 html 这个问题很简单 xff0c 属于Excel基础操作技巧 xff0c 我就分享我最喜欢用的三招给你 xf
  • 为什么电脑唯独搜不到自己家wifi?

    转载自品略图书馆 http www pinlue com article 2020 05 2213 2410586244619 html 电脑唯独搜不到自己家wifi xff0c 别人家的都能搜到 xff0c 手机也可以搜到自己家的 xff
  • http://和www.前缀网站有什么具体区别?

    转载自品略图书馆 http www pinlue com article 2019 03 1813 598231572617 html 将http 和www 放一起比较 xff0c 是没有实际意义的 一 http协议二 域名一 http协议
  • 什么是三层交换机、网关、DNS、子网掩码、MAC地址?

    转载自品略图书馆 http www pinlue com article 2020 08 2313 2511146576256 html 一文讲懂什么是三层交换机 网关 DNS 子网掩码 MAC地址 很多朋友多次问到什么是网关 dns 子网
  • C++类对象共享数据的5种实现方法

    转自 xff1a http www pinlue com article 2020 09 2617 0611262487540 html
  • c语言free的用法

    转自 xff1a http www pinlue com article 2020 03 3100 4610073901713 html
  • Spring Boot 修改默认端口号

    修改配置文件 xff0c 加上参数 xff1a server port 61 8014 或者 xff1a server port 8014 启动后可发现tomcat运行在端口8014上了 实现原因可看以下链接 转载 SpringBoot修改
  • php调用类中的方法

    转自 xff1a http www pinlue com article 2020 06 1219 0410725563037 html
  • 人工智能 : 第三篇”脑机接口“

    本文作者Tim Urban xff1a Wait but Why的作者Tim Urban 是埃隆马斯克 xff08 特斯拉 SpaceX创始人 xff09 强烈推荐的科技博主 他写的AI文章是全世界转发量最高的 他的粉丝还包括 xff1a
  • 如何找回一台丢失的Win10电脑?

    今天说说如何找电脑 为什么小微想到了这个问题 还要从一次关于奇葩办公地点的讨论说起 看到大家的回答 xff0c 小微佩服得五体投地 办公经历还可以如此精jing彩xin绝dong伦po 作为结实靠谱的出行伙伴 ThinkPad陪伴大家出现在
  • 不必再狂按空格键了!Word 里文字对齐推荐这4种方法

    我们在用Word写论文 制作简历的时候 xff0c 通常会遇到把word中某些特定文字对齐的情况 那么问题来了 xff0c 你平时都是怎么对齐文字的 xff1f 傻傻的用空格来对齐吗 xff1f 在字符数不等的情况下 xff0c 加空格不仅
  • AMI主板BIOS菜单图文讲解设置!

    电脑硬件 xff0c 包括电脑中所有物理的零件 xff0c 以此来区分它所包括或执行的数据和为硬件提供指令以完成任务的软件 主要包含 机箱 xff0c 主板 xff0c 总线 xff0c 电源 xff0c 硬盘 xff0c 存储控制器 xf
  • luffy-02

    这里写目录标题 一 昨日回顾二 今日内容1 路飞前台配置 1 重构项目目录 2 文件修订 xff1a 目录中非配置文件的多余文件可以移除router的使用 3 前台配置 全局样式 配置文件 axios vue cookies element
  • luffy-03

    这里写目录标题 一 昨日回顾二 今日内容1 跨域问题1 1后端自己处理跨域简单请求非简单请求中间件处理 1 2前端处理跨域App vuevue config js 2 头部组件 尾部组件components Header vuecompon
  • luffy-04

    这里写目录标题 一 昨日回顾二 今日内容1 路飞项目使用xadmin2 首页轮播图接口 轮播图表 视图类 轮播图数量4 通过配置实现 前端对接 后续 接口缓存 3 git的使用3 1git的工作流程 4 git分支git提交代码出现冲突的2