导出项目依赖
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远程仓库挂掉,本地可以继续做代码版本的管理
git,github,gitee,gitlab
1.git :版本管理软件,可以做版本管理
2.github:它是一个网站:https://github.com/ 全球最大的开源代码管理仓库,git远程仓库,但有一些限制:有些运营商不让访问
3.gitee:中国最大的开源代码管理仓库(私有仓库)
-https://gitee.com/kitego/hashmart
4.gitlab:公司内部搭建自己的远程仓库,只在公司内部用,外网访问不到(到公司用这个多)
git工作流程
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)