83、导出项目依赖、首页推荐课程前端 、git介绍和安装、git使用流程、常用命令、忽略文件、Django测试环境搭建

214 阅读10分钟

导出项目依赖

1.以后所有python项目的根路径下,都会有个 requirements.txt(约定俗称的名字),这里面记录了当前项目所有的依赖
	格式如下:
 	"""
 	Django==3.2.12
	redis # 最新版
 	"""

2.设置(两种方式)
	1.笨办法:直接手动建立
	2.一键导出(虚拟环境中:虚拟环境用的模块,就是当前项目的模块,一般不会少,不会多,如果多,可以手动删掉)
		1.pip list
		2.pip freeze >requirements.txt

首页推荐课程前端

FeaturedFirst

<template>
<div>
<el-row>
  <el-col :span="6" v-for="(o, index) in 8" :key="o" class="feature_padding">
    <el-card :body-style="{ padding: '0px' }">
      <img src="http://photo.liuqingzheng.top/2023%2002%2022%2021%2057%2011%20/image-20230222215707795.png" class="image">
      <div style="padding: 14px;">
        <span>推荐的课程</span>
        <div class="bottom clearfix">
          <time class="time">价格:100</time>
          <el-button type="text" class="button">查看详情</el-button>
        </div>
      </div>
    </el-card>
  </el-col>
</el-row>
    <img src="http://photo.liuqingzheng.top/2023%2003%2001%2016%2010%2034%20/1.png" alt="" width="100%" height="500px">

</div>
</template>

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


<style scoped>
  .time {
    font-size: 13px;
    color: #999;
  }

  .bottom {
    margin-top: 13px;
    line-height: 12px;
  }

  .button {
    padding: 0;
    float: right;
  }

  .image {
    width: 100%;
    display: block;
  }

  .clearfix:before,
  .clearfix:after {
      display: table;
      content: "";
  }

  .clearfix:after {
      clear: both
  }
  .feature_padding{
      padding: 50px;
  }

</style>

HomeView

<template>
    <div class="home">

        <Header></Header>
        <Banner></Banner>
        <FeaturedFirst></FeaturedFirst>
        <Footer></Footer>


    </div>
</template>

<script>
import Header from "@/components/Header.vue";
import Footer from "@/components/Footer.vue";
import Banner from "@/components/Banner.vue";
import FeaturedFirst from "@/components/FeaturedFirst.vue";

export default {
    name: 'HomeView',
    components: {
        Header, Footer, Banner,FeaturedFirst
    }
}
</script>

git介绍和安装

1.版本管理软件
	1.对代码版本进行管理--->首页功能完成--->课程功能完成--->可以回退到某个版本
  2.协同开发-->多人开发-->合并代码--->可能会有冲突,解决冲突
  """
  版本管理软件
  完成协同开项目,帮助程序员整合代码
		1.帮助开发者合并开发的代码
		2.如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突
  """
  """
  什么是git:版本控制器 - 控制的对象是开发的项目代码
		代码开发时间轴:需求1 => 版本库1 ==> 需求2 => 版本库2 => 版本库3(版本库1) => 版本库4(版本库2)
  """
    
2.版本管理软件:主流就两个
	1.git:现在用的最多
	2.svn:老
    
3.安装git,就是个软件
	-https://git-scm.com/download/win
	-官网下载,一路下一步
  -再命令行中:git version  如果有版本信息,说明装好了
  
4.学习
	https://www.cnblogs.com/liuqingzheng/p/15328319.html
	https://www.cnblogs.com/liuqingzheng/articles/17146214.html

git与svn比较

1.svn:cs架构 一个服务端,多个客户端,如果服务端挂掉,整个代码合并,提交代码就做不了了,只能本地开发代码
2.git:分布式管理,装git的客户端,既可以当客户端,又可以当服务端,如果git远程仓库挂掉,本地可以继续做代码版本的管理   

svn.jpeg

git.jpeg

git,github,gitee,gitlab

1.git :版本管理软件,可以做版本管理
2.github:它是一个网站:https://github.com/ 全球最大的开源代码管理仓库,git远程仓库,但有一些限制:有些运营商不让访问
3.gitee:中国最大的开源代码管理仓库(私有仓库)
	-https://gitee.com/kitego/hashmart
4.gitlab:公司内部搭建自己的远程仓库,只在公司内部用,外网访问不到(到公司用这个多)

git工作流程

git工作流程.png

git分3个区--->三个区的来回操作
1.工作区:存放代码的文件夹,只要工作区文件发生变(修改,新增,删除)
2.暂存区:工作的变更,提交到暂存区  git add . 把工作区变更提交到暂存区
3.版本库:暂存区内容,放到版本库,被版本管理---》git commit -m ''

git常用命令

准备

在文件里某个位置,右键--->git bash here ---->打开命令窗口--->等同于cmd--->在这个命令窗口里可以执行 linux命令,来操作win
ps:mac电脑只需建立文件

初始化为git仓库

1.将已有的文件夹-初始化为git仓库
  >: cd 目标文件夹内部
  >: git init
2.在指定目录下 - 初始化git仓库
  >: cd 目标目录
  >: git init 仓库名
  
3.eg:
 na@Nas-MacBook-Pro:cd Desktop/nana
 na@Nas-MacBook-Pro:git init

设置用户

1.在仓库目录终端下 - 设置全局用户(以后所有的版本提交时,都用这个用户和邮箱)
>: git config --global user.name '用户名'
>: git config --global user.email '用户邮箱'
	ps:在全局文件 C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用

2.在仓库目录终端下 - 设置局部用户(只在当前 仓库生效)
>: git config user.name '用户名'
	-- 用户名
>: git config user.email '用户邮箱'
	-- 用户邮箱
ps:
		1.在当前仓库下的config新建用户信息,只能在当前仓库下使用
		2.一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户
    3.在仓库路径下.git 文件夹下 config文件中配置的
    
3.eg:
   na@Nas-MacBook-Pro:git config --global user.name 'ln'
   na@Nas-MacBook-Pro:git config --global user.email '863942169@qq.com'

查看仓库状态

1.当仓库中有文件增加、删除、修改,都可以在仓库状态中查看
	查看仓库状态: git status  
	查看仓库状态的简约显示:git status -s  

2.显示红、绿色
  1.如果是红色,表明是在工作发生了变化,没有提交到暂存区
  2.如果是绿色:表明,暂存区数据没有提交到版本库
  3.如果没有东西,表示当前目录下所有文件被git管理了,被版本管理了
  

工作区操作

1.通过任何方式完成的文件删与改
2.空文件夹不会被git记录
把工作区变更,提交到暂存区
1.当前目录下所有变更都提交:git add  .  
2.只提交当前目录下 1.txt这个文件的变更:git add 1.txt 
3.eg:
   na@Nas-MacBook-Pro:git add 1.txt
   na@Nas-MacBook-Pro:git status
  
   na@Nas-MacBook-Pro:git add .
 	 na@Nas-MacBook-Pro:git status

把暂存区内容,提交到版本库

1.只要被版本管理的东西,你尽管操作,后期都能回退回来
2.git命令:git commit -m "版本描述信息"
3.eg:
 na@Nas-MacBook-Pro:git commit -m '我的第一次提交'
 
ps:如果不设置用户,提交不了,不知道是谁提交

查看版本信息

1.git log
2.git relog
3.eg:
   na@Nas-MacBook-Pro: git log

把工作区变更回退

1.命令:git checkout . # 当前路径下所有
2.eg:
na@Nas-MacBook-Pro:git status
na@Nas-MacBook-Pro:git checkout .
ps:新变更的文件内容没有了

把暂存区内容,拉回到工作区

1.把暂存区内容,拉回到工作区(由绿变红):git reset HEAD
2.eg:
  na@Nas-MacBook-Pro:git status
  na@Nas-MacBook-Pro:git add 1.txt
  na@Nas-MacBook-Pro:git status
  na@Nas-MacBook-Pro:git reset HEAD
  na@Nas-MacBook-Pro:git status

从版本库拉回到暂存区

1.从版本库拉回到暂存区(版本库内容回退,变绿)--->需要写上一个版本
2.git命令:git reset --soft  1603edf06d7d302ba50c22373c963af15725eda5
3.eg:
  na@Nas-MacBook-Pro:git status
  na@Nas-MacBook-Pro:git add 1.txt
  na@Nas-MacBook-Pro:git commit -m '第五次'
  na@Nas-MacBook-Pro:git log
  na@Nas-MacBook-Pro:git  reset --soft 90da831f790febe841b0690f19307f20096f4d06
  na@Nas-MacBook-Pro:git status

把版本库退回到工作区

1.把版本库退回到工作区(版本库内容回退,变红)
2.git命令:git reset --mix 1603edf06d7d302ba50c22373c963af15725eda5
3.eg:
  na@Nas-MacBook-Pro:git log
  na@Nas-MacBook-Pro:git commit -m '第五次'
  na@Nas-MacBook-Pro:git log
  na@Nas-MacBook-Pro:git reset --mix 90da831f790febe841b0690f19307f20096f4d06
  na@Nas-MacBook-Pro:git status
  

把版本库直接完整回退会工作区

1.把版本库直接完整回退会工作区(增加的也没了)
2.git命令:git reset --hard 1603edf06d7d302ba50c22373c963af15725eda5
3.eg:
na@Nas-MacBook-Pro:git status
na@Nas-MacBook-Pro:git add 1.txt
na@Nas-MacBook-Pro:git commit -m '第七次'
na@Nas-MacBook-Pro:git log
na@Nas-MacBook-Pro:git reset --hard 90da831f790febe841b0690f19307f20096f4d06

回退到某个版本

回退到某个版本的样子(可能会用):git reset --hard 19f5891

Ps:只要被版本管理的文件,即便以后删除了,也能回来

扩展

1.git log 和git reflog的区别
  1.git log 命令可以显示所有提交过的版本信息
  	如果感觉太繁琐,可以加上参数  --pretty=oneline,只会显示版本号和提交时的备注信息
  2.git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)


2.git reset --hard,--mix,--soft的区别
	1.hard (硬)-> 全部删除,会彻底返回到回退前的版本状态,了无痕迹
	2.mixed (中)-> 保留工作目录,文件回退到未commit的状态
	3.soft (软)-> 保留工作目录、暂存区 ,文件会回退到未 add(未到暂存)的状态
  
总结:
  soft是撤销commit的提交,但工作区未提交的更改还是保留;
  mixed是撤销暂存区的提交,工作区的更改同样也保留;
  而hard是把工作区、暂存区、commit到仓库的三个版本都回滚了

Git忽略文件

1.写项目,会有一些文件或文件夹,不希望被git管理,忽略掉它, 不被git管理
	-.idea
	-node_models
	-xx
    
2.需要写个忽略文件.gitignore必须叫它,没有后缀名,在里面写忽略的文件或文件夹,写法如下
  .idea   # 忽略idea文件夹及其下面所有的文件
  lqz.txt  # 忽略仓库中所有的lqz.txt
  /lqz.txt # 忽略当前路径下的lqz.txt
  a/lqz.txt # 只忽略当前路径下a文件夹下lqz.txt
  *x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)

3.给路飞做忽略文件
    .idea
    *.log
    __pycache__
    *.pyc
    scripts

补充:测试环境大搭建

1.在tests.py中搭建  
2.将入口文件manage.py中:os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django54.settings")CV过去
3.再添加一些代码  
eg:  from django.test import TestCase​  
			# Create your tests here.  
  		if __name__ == "__main__":      
      		import os      
        	os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django54.settings")      
          import django      
          django.setup()      # 以后再写ORM相关的操作的时候,就写在这个下面      ....

作业


---------------
# 中间件
在路飞中,加入功能----》只要用户访问,记录用户的客户端类型
# 表---》字段aaaaaaaaaaaaaaaa
# 用户ip地址,用户访问时间,用户访问的地址,用户的请求头类型 user-agent


# echars 画出饼形图,显示客户端访问类型的比例
	-vue中集成echrs,xian's

USE_TZ = False写成true,和fasle的区别

"""
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
"""
1.如果:USE_TZ = True的话,DateTimeField中的属性:auto_now_add或auto_now,都显示的是utc时间,差8小时
2.如果:USE_TZ = False的话,DateTimeField中的属性:auto_now_add或auto_now,都显示的是上海时间,与当前时间一致

auto_now:更新这条记录,会把当前时间存入 ,update更新,象.属性=xx ---》对象.save()

auto_now=Ture,字段保存时会自动保存当前时间,但要注意每次对其实例执行save()的时候都会将当前时间保存,也就是不能再手动给它存非当前时间的值。
auto_now_add=True,字段在实例第一次保存的时候会保存当前时间,不管你在这里是否对其赋值。但是之后的save()是可以手动赋值的。也就是新实例化一个model,想手动存其他时间,就需要对该实例save()之后赋值然后再save()。
1.auto_now_add:这个字段新增的时候,可以不传,会以当前时间存入
	这样写,配置文件中:USE_TZ = False写成true,和fasle的区别
2.auto_now:更新这条记录,会把当前时间存入
	update更新
  	直接:表.objects.filter().update()
		对象.属性=xx  --->对象.save() 
		default=datetime.datetime.now  也会设置当前时间,不要加括号

在路飞中,加入功能---->只要用户访问,记录用户的客户端类型

字段:用户ip地址,用户访问时间,用户访问的地址,用户的请求头类型 user-agent

home.models.ClientType

class ClientType(models.Model):
    interview_ip = models.CharField(max_length=64)
    interview_time = models.DateTimeField(auto_now=True)
    interview_addr = models.CharField(max_length=64)
    user_agent = models.CharField(max_length=32)

utils.common_middleware.UserTypeMiddle

from user_agents import parse

class UserTypeMiddle(MiddlewareMixin):
    def process_request(self, request):
        user_ip = request.META.get('REMOTE_ADDR')
        user_agent1 = request.META.get('HTTP_USER_AGENT')
        user_agent = parse(user_agent1).browser.family
        interview_addr = request.get_full_path()
        print(interview_addr)

        from home.models import ClientType
        res = ClientType.objects.create(interview_ip=user_ip,interview_addr=interview_addr,user_agent=user_agent)
        print(res)