Django文件配置、request对象、连接MySQL、ORM

news2024/10/7 14:33:45

文章目录

  • Django静态文件及相关配置
    • 静态文件前言
    • 静态文件相关配置
  • form表单
  • request对象
    • request请求结果
    • GET请求
    • POST请求
  • pycharm连接数据库
  • Django连接MySQL
  • Django ORM简介

Django静态文件及相关配置

在此篇博客我将以一个用户登录页面来引入相关知识

首先我们先编写一个html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/jquery-3.7.1.min.js"></script>
    <script src="../bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="../bootstrap-3.4.1-dist/css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        <h1 class="text-center">登录页面</h1>
        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <form action="" method="post">
                    <div class="form-group">
                        username: <input type="text" class="form-control" name="username">
                    </div>

                    <div class="form-group">
                        password: <input type="password" class="form-control" name="password">
                    </div>

                    <div class="form-group">
                        <input type="submit" class="btn btn-block btn-success" value="登录">
                    </div>

                </form>
            </div>
        </div>
    </div>
</body>
</html>

静态文件前言

不怎么经常变化的文件,主要针对html文件所使用到的各种资源,比如css文件、js文件、img文件、第三方框架文件

在Django中针对静态文件资源需要单独开设一个目录统一存放,这个目录名称统一命名为static目录

	static目录	该目录下类型文件居多可再多分
	├── css目录
		  ├── bootstrap.min.css
	└── js目录
		 ├── jquery-3.7.1.min.js
		 └── bootstrap.min.js
	└── img目录
	├── utils目录/plugins目录/libs目录/others目录/不创建目录

资源访问

我们在地址栏之所以可以输入路由获取到相应的资源登录资源,是因为程序员提前开设了相对应的资源接口,如果在网址输入http://127.0.0.1:8000/admin,就能访问相对应的接口资源,反之如果没有开设相对应的接口则访问不了

在这里插入图片描述

静态文件资源访问
在django中直接引入css和js,是不能直接使用动态效果的,要静态文件配置添加,添加了Bootstrap之前要添加jquery。默认情况下是无法访问的,是因为我们没有提前开设静态文件资源的访问接口。如下图所示
在这里插入图片描述
而login能请求成功是因为在后端已经开设了这个http://127.0.0.1:8000/login/这个端口,所以浏览器在地址栏输入对应的链接后就能访问;但是请求URL:http://127.0.0.1:8000/static/bootstrap-3.4.1-dist/css/bootstrap.min.css是因为后端没有开设这个端口,所以浏览器朝这个网址请求资源就访问不了。

那么怎么解决?

理论上我们应该在urls填写相对应的关系,但是静态文件太多了,所以django专门为静态文件开设了一个static文件资源接口

静态文件相关配置

1.如何配置静态文件配置?

首先在settings里面找到最后STATIC_URL = ‘/static/’,在此代码的下面配置static的所有资源的路径

在这里插入图片描述

2.静态文件令牌

		STATIC_URL = './static/'  # 访问静态文件资源的令牌
		STATICFILES_DIRS = [
			os.path.join(BASE_DIR, 'static'), # 存储静态文件资源的目录名称
			os.path.join(BASE_DIR, 'static1') # 存储静态文件资源的目录名称(非要用别的名称设定目录也是可以的)
		]
		
		'当令牌正确之后,会拿着后面的路径依次去到列表中自上而下的查找,一旦找到就返回'

查找顺序:静态文件令牌>>>>接口资源文件(自上而下,找到就截止),只有令牌对了才有资格访问接口文件资源

要是我们就是想切换接口令牌呢?

当那个时候我们就得需要去到所有使用到令牌的地方去一一修改,但是有的时候就浏览器会请求临时缓存内容发送给我们,我们不可能一个一个去改static,这样太麻烦了,所以我们可以直接动态解析

3.静态文件令牌动态解析

	静态文件匹配
	<link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css">
	<script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>

如果我们想要更改令牌的话2,我们需要把上门静态文件配置改为下面的模版语法(即可动态解析)

	django提供的模版语法{% load static %} ,相对于模块
	'为了防止令牌一直切换,设置一个专门监听令牌的方法,设置之后会有一个动态解析后端设置前端自动解析设置相同'
	{% load static %}
	<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
	<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>

这样修改完后,我们后面每次想改令牌,直接在settings将STATIC_URL='/static/'修改为自己想要的名称即可,如STATIC_URL= '/UpdateStatic/',后面django会自动为我们动态解析的,如下图
在这里插入图片描述

form表单

	action		控制数据提交的地址
		1.action=""  数据默认提交当前页面所在的地址
		2.action="http://www.baidu.com"  指定提交完整的网址
		3.action="/login"  超当前服务端的login地址提交

请求方式补充

1.get请求:朝服务端索要数据,也可以携带一些额外的要求。
携带额外数据方式:在地址栏里面,URL?xxx=yyy&uuu=zzz,但是问号后面携带的数据大小是有限制的(2-8kb),并且不能携带敏感数据(密码)

2.post请求:朝服务端提交数据
携带额外数据的方式:请求体,请求体携带数据安全性较高并且没有大小的限制

前期发送post请求需要再settings配置文件中注释掉这行代码如下:
在这里插入图片描述

get请求、post请求如下
在这里插入图片描述

form表单需要注意的点

  1. 关于请求方法
  2. 获取用户标签要加上name属性,不加name属性时在后端是接收不了的
  3. 修改settings里面的配置

request对象

request请求结果

语法说明
request.method获取请求方式 结果是纯大写的字符串
request.POST获取POST请求发送来的普通数据(不包含文件)
request.POST.get()默认只获取列表中最后一个数据值
request.POST.getlist()获取键对应的整个列表 无论有几个数据值
request.GET获取url后面携带的非敏感数据
request.GET.get()默认只获取列表中最后一个数据值
request.GET.getlist()获取键对应的整个列表 无论有几个数据值

Request函数会通过不同的请求方式触发,并且需要执行不同的业务逻辑代码

	def index(request):
		return HTTpReponse('hello world!')

作用:浏览器访问某一个URL后,通过路由找到对应的视图里面某个函数,然后将浏览器的请求传递给这个函数,这也就是为何要定义一个形参了,而通常形参名都是:request,这是一种规范。

request内包含了浏览器想Django服务端发送的请求,常见发送请求的方法有两种:GET、POST
它们携带请求的形式是不同的。

GET请求

index.html文件(前提是已经搭建好了Django的基本环境)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    {% load static %}
    <script src="{% static 'js/jquery-3.7.1.min.js' %}"></script>
    <script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>
    <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
</head>
<body>
    <div class="container">
        <h1 class="text-center">登录页面</h1>
        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <form action="" method="get">
                    <div class="form-group">
                        username: <input type="text" class="form-control" name="username">
                    </div>

                    <div class="form-group">
                        password: <input type="password" class="form-control" name="password">
                    </div>

                    <div class="form-group">
                        <input type="submit" class="btn btn-blcok btn-success">
                    </div>
                </form>
            </div>
        </div>
    </div>
</body>
</html>

使用form表单以get方法提交请求,action不填写的话,默认向当前地址提交。

在这里插入图片描述

GET方法提交请求的方式:将请求数据携带在URL内,我们在Django内通过debug查看一下。(需要先提交一遍,保留url的参数再开启debug,然后再刷新一下页面,因为debug一开启就进入阻塞了)
在这里插入图片描述

request内包含了浏览器提交请求的方法,在对应请求方法里面包含了携带的数据,我们可以提取这些数据进行处理。从上图可以看出,这些数据是一个字典形式的,而字典的key就是我们在HTML文件内输入框的name属性值。

view.py文件中

	from django.shortcuts import render,HttpResponse,redirect

	def index(request): 
	    # print(request.method, request)  # 查看请求提交的方法
	    username = request.GET.get('username')
	    password = request.GET.get('password')
	    # 获取get方法提交请求携带的数据,根据字典形式取值:key值就是name属性值
	    print(username,password)
	
	    return render(request,'index.html')

浏览器打开效果:
在这里插入图片描述
推荐字典key的取值方式使用.get(key),这样如果key不存在的话则返回一个None,而使用[key]取值的话,key不存在的话则报错。

但是通常使用GET方式提交数据是不安全的,相对这种账号、密码登录的功能,使用的都是POST请求。

注意:request.GET获取的是URL?后面的内容

只要用户访问的URL令牌没有问题,依然可以交给对应的视图函数处理:如

	http://127.0.0.1:8080/index/?username=jack&password=000

这要用户输入这种URL,提交到后端只会识别ip+端口后面的/index/,而后面的内容则会被当做额外数据提交到后端。所以会将这个请求交给index视图函数。然后使用request.GET就可以把那个额外数据取出来了。我们在post请求下面一起演示


POST请求

先将表单的提交请求方式修改为POST:
在这里插入图片描述
使用浏览器打开:
在这里插入图片描述
可以发现,无法正常显示我们的HTML文件,查看报错信息发现是csrf原因,目前我们不需要了解为什么会报这个错误,解决方案就是,在settings.py文件内:
在这里插入图片描述
此时我们再重启一下Django,使用post方法提交就不会出现这个错误信息了。

我们在views.py内使用debug看一下POST请求的内容:
在这里插入图片描述
根据上图,我们可以发现request有两个属性都存放了浏览器提交请求的数据:POST、body。而使用GET方法提交时没有发现body属性存有值,那么我们来逐个打印一下,看看它们的不同之处。

在这里插入图片描述
POST属性可以理解为存储了字典形式的值,而body内存储的是二进制。所以方便取值我们还是使用POST来解决。

演示GET属性与POST属性一起使用:
修改URL,表单提交方式为post
在这里插入图片描述

可以发现,GET属性获取的只是URL里?后面的内容,而POST则是获取用户真正输入的数据。


get()与getlist()

Django内有一个很奇怪的现象,从上图中我们就可以发现,明明key对应的是一个列表,我们get()不是取出一个列表,而是将列表里面的值取出来。这是Django内自带的一个取值方式,而不是我们平常所见取字典值的get()。

其实这里的get()取出的是列表的内的最后一个值,我们修改一下HTML页面再提交就明白了
在这里插入图片描述

可以发现,现在有两个name属性值相同的input,那么我们都输入完后再提交一次看看。
在这里插入图片描述
在这里插入图片描述
从上图可以发现,get()取出的是列表的最后一个值,那么getlist()就很明确了,直接获取整个列表。
在这里插入图片描述


总结:

部分视图函数内,我们会写两种情况,第一种就是如果浏览使用POST传递了数据,我们执行的操作,另一种就是浏览器使用GET请求我们应该执行的操作。

通常访问页面发送的都是GET请求,如果是一个登录界面的话,视图函数会这样写:

	def login(request):
	if request.method == 'POST':
		请求信息提取过程....
		
		if 账号密码校验成功:
			登录状态绑定...
			return redirect(重定向到主页)
		else:
			return 返回账号或者密码错误结果
			
	return render(request,'登录页面.html')

pycharm连接数据库

1.pycharm初次连接数据库,都要下载相应的驱动,驱动不行就换驱动,验证的话就是登录用户名(端口和地址) 库名,验证登录就用test connection

在这里插入图片描述

2.登录管理员账户和密码,连接你需要的数据库(库要提前创建好),在连接之前可以先点击Test Connection 测试连接是一次。注意:在公司不能是管理员的用户登录的!

在这里插入图片描述
3.成功连接成功
在这里插入图片描述

Django连接MySQL

django自带的sqlite3是一个小型的数据库,功能比较少,主要是用于本地测试。实际项目都会替换它的

1.修改配置文件中数据库设置成django连接MySQL

django配置文件中默认的是sqlite3数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

======================================================

django连接MySQL要修改上述配置
1.第一配置文件中配置
DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',   # 修改成MySQL数据库
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),   # 连接数据库名称 先创建好才能指定
        'ENGINE': 'django.db.backends.mysql',   # 修改成MySQL数据库
        'NAME': 'user',   # 连接数据库名称 先创建好才能指定
        'HOST': '127.0.0.1',	# 网址
        'PORT': 3306,	# 端口
        'USER': 'root',		# 指定用户
        #'PASSWORD': '123',  因为我的mysql没有设置密码所以可以不用填写
        'CHARSET': 'utf8'	# 字符编码
    }
}
 注意,左边的名字都要大写!!!!

另外链接可能会出现问题 需要指定链接MySQL模块
		MAC	Django2.2.2 版本需要在项目或者应用目录下的__init__.py中编写一行代码
				import pymysql	pymysql.install_as_MySQLdb()
				出现编码问题 点击蓝色链接 把decode改成encode即可
				MAC不需要安装mysqlclient
				
		WIN Django2.2.2版本不需要再项目目或者应用目录下的__init__.py中编写一行代码
				WIN需要安装mysqlclient

2.手动改动将默认mysqldb改为pymysql

django默认用的是mysqldb模块链接MySQL, 但是该模块的兼容性不好 需要手动改为用pymysql链接,需要指定模块

django1.X版本需要在项目目录下或者app目录下的__init__.py编写代码

	import pymysql
	pymysql.install_as_MySQLdb()

django2.X及以上都可以直接通过下载mysqlclient模块解决

	pip3.8 install mysqlclient

​ ps:该模块windows下载问题不大 主要是mac电脑可能有问题


Django ORM简介

ORM:Object对象,Relations关系、Mapping映射。简称:对象关系映射

优点:在Django中操作数据库就不用写原生的SQL语句,而是使用面向对象的语法和一些方法来操作数据库
缺点:代码的封装程度太高,导致的问题:执行效率下降了 ,目前可以忽略,需要自己写原生SQL语句

对象关系映射是通过面向对象的方式来操作数据库,这就需要对应的关系映射,数据中可以分为库,表,字段信息,一条条数据,而需要用面向对象的关系去对应。于是就有了下面对应关系。

  • 数据库 ======= 面向对象模型
  • 表 ======= 类
  • 字段 ======= 类属性
  • 记录 ======= 每个实例
	什么是ORM?
		对象关系映射(Object Relational Mapping 简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术
		ORM框架是连接数据库的桥梁 只要提供了持久化类与表的映射关系 ORM框架在运行时就能参照映射文件的信息 把对象持久化到数据库中
	
	为什么用ORM?
		当我们实现一个应用程序时不用ORM 我们可能会写特别多数据访问层的代码 从数据库保存、删除、读取对象信息 而这些代码都是重复的
		而使用ORM则会大大减少重复性代码 对象关系映射主要实现程序对象到关系数据库数据的映射
		类映射成表	对象映射成记录	对象点属性映射成字段对应的值
		
		ORM的存在可以让不会MySQL的python程序员 使用python的语法简单快捷的操作MySQL
	
	1.先去应用目录下models.py中编写模型类
		class User(models.Model):								# 类似于定义了表名	
		id = models.AutoField(primary_key=True)				# 类似于新建了记录ID主键
		name = models.CharField(max_length=32)				# 类似于定义了普通varchar字段
		pwd = models.InteerField()							# 类似于定义了
		
		id int primary key auto_increment
		name varchar(32)
		pwd int
		
	'''注意括号内可以添加多个属性'''
	
	2.数据库迁移与同步命令
		2.1>将models中有关数据库的操作记录下来到migrations文件夹中
		python38 manage.py makemigrations
		
		2.2>将操作命令真正的去操作数据库
		python38 manage.py migrate
	
	当修改了models中与数据库相关的代码 都必须执行以上两个命令 要不然无效
	ps:可以简写 也可以指定应用单独迁移/同步	Tools>Run Manage.py Task
	
	3.表的主键在orm中 可以不写 orm会自动帮你添加一个id的主键
		如果你需要主键的名称不叫id 只能自己创建

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1191189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络笔记】网络层服务模型——数据报网络

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

不可忽视的国外服务器地址IP选择指南

​  在如今互联网高速发展的时代&#xff0c;海外服务器扮演着重要的角色。选择合适的国外服务器IP地址却是一项复杂而又关键的任务。本文将为您介绍一些不可忽视的国外服务器地址IP选择指南。 私有IP地址&#xff1a; 私有IP地址是指在局域网内使用的IP地址&#xff0c;用于…

vue Sts认证后直传图片到阿里云OSS

后端进行sts认证生成临时身份凭证&#xff0c;前端通过凭证直传图片等文件到OSS中 一 OSS配置 增加用户和角色&#xff0c;创建OSS bucket 1.1 添加用户 登录阿里云管理控制台&#xff0c;右侧头像&#xff0c;进入访问控制 点击左侧导航栏的身份管理的用户&#xff0c;点击…

python- time模块

3种时间格式之间的转换 &#xff1a; 1、时间戳->格式化时间 time.localtime(timestamp)&#xff1a;北京时间 time.gmtime(timestamp) &#xff1a;伦敦时间 2、格式化时间->时间戳时间

PHP网站源码 知识付费分站代理自助下单系统 自带多款模板

源码测评&#xff1a;功能很齐全&#xff0c;有可以对接的总站&#xff0c;应该是对接好就可以推广赚钱了&#xff0c;但是这种感觉能赚钱的就那么几个人&#xff0c;见仁见智吧&#xff01; 截图演示&#xff1a; 转载自 https://www.qnziyw.cn/cmsmb/qtcms/3952.html

【JAVA学习笔记】67 - 坦克大战1.5 - 1.6,防止重叠,记录成绩,选择是否开新游戏或上局游戏,播放游戏音乐

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter20/src 增加功能 1.防止敌人坦克重叠运动 2.记录玩家的成绩&#xff0c;存盘退出 3.记录当时的敌人坦克坐标&#xff0c;存盘退出 4.玩游戏时&#xff0c;可以选择是开新游戏还是继续上局…

说说对React Hooks的理解?解决了什么问题?

一、是什么 Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 至于为什么引入hook&#xff0c;官方给出的动机是解决长时间使用和维护react过程中常遇到的问题&#xff0c;例如&#xff1a; 难以重用和共享组件中的与状态…

ChatGPT:something went wrong

今天下午不知什么原因&#xff0c;ChatGPT无法使用。我原来在使用ChatGPT for chrome&#xff0c;返回了一个答案&#xff0c;后来在网页端无法使用&#xff0c;以为是这个chrome插件泄露API KEY导致的。注销账号&#xff0c;删除API KEY后&#xff0c;wrong问题仍然存在。 我…

读程序员的制胜技笔记08_死磕优化(上)

1. 过早的优化是万恶之源 1.1. 著名的计算机科学家高德纳(Donald Knuth)的一句名言 1.2. 原话是&#xff1a;“对于约97%的微小优化点&#xff0c;我们应该忽略它们&#xff1a;过早的优化是万恶之源。而对于剩下的关键的3%&#xff0c;我们则不能放弃优化的机会。” 2. 过早…

12 # 手写 findIndex 方法

findIndex 的使用 findIndex() 方法返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回 -1。 <script>var arr [1, 3, 5, 7, 8];var result arr.findIndex(function (ele, index, array) {console.log("ele----->", ele);conso…

【Java】SPI在Java中的实现与应用

一、SPI的概念 1.1、什么是API&#xff1f; API在我们日常开发工作中是比较直观可以看到的&#xff0c;比如在 Spring 项目中&#xff0c;我们通常习惯在写 service 层代码前&#xff0c;添加一个接口层&#xff0c;对于 service 的调用一般也都是基于接口操作&#xff0c;通…

已解决:rm: 无法删除“/opt/module/zookeeper-3.4.10/zkData/zookeeper_server.pid“: 权限不够

解决&#xff1a; ZooKeeper JMX enabled by default Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg Stopping zookeeper ... /opt/module/zookeeper-3.4.10/bin/zkServer.sh: 第 182 行:kill: (4149) - 不允许的操作 rm: 无法删除"/opt/module/zooke…

开发知识点-Python

Python从小白到入土 python渗透测试安全工具开发锦集Python安全工具编程基础第一章 Python在网络安全中的应用第一节 Python黑客领域的现状第二节 我们可以用Python做什么第三节 第一章课程内容总结 第二章 python安全应用编程入门第一节 Python正则表达式第二节 Python Web编程…

C++二分查找算法:阶乘函数后 K 个零

涉及知识点 二分查找 数学 题目 f(x) 是 x! 末尾是 0 的数量。回想一下 x! 1 * 2 * 3 * … * x&#xff0c;且 0! 1 。 例如&#xff0c; f(3) 0 &#xff0c;因为 3! 6 的末尾没有 0 &#xff1b;而 f(11) 2 &#xff0c;因为 11! 39916800 末端有 2 个 0 。 给定 k&a…

Python--列表及其应用场景

1.为什么需要列表 思考&#xff1a;有一个人的姓名(laowang)怎么书写存储程序&#xff1f; 用 变量。如&#xff1a;name laowang 但是&#xff0c;如果要记录很多人的名字&#xff0c;怎么办&#xff1f; 思考&#xff1a; 如果一个班级100位学生&#xff0c;每个人的…

17 Linux 中断

一、Linux 中断简介 1. Linux 中断 API 函数 ① 中断号 每个中断都有一个中断号&#xff0c;通过中断号可以区分出不同的中断。在 Linux 内核中使用一个 int 变量表示中断号。 ② request_irq 函数 在 Linux 中想要使用某个中断是需要申请的&#xff0c;request_irq 函数就是…

【Unity ShaderGraph】| 如何快速制作一个炫酷的 全息投影效果

前言 【Unity ShaderGraph】| 如何快速制作一个炫酷的 全息投影效果一、效果展示二、 全息投影效果 前言 本文将使用ShaderGraph制作一个 炫酷的 全息投影效果 &#xff0c;可以直接拿到项目中使用。对ShaderGraph还不了解的小伙伴可以参考这篇文章&#xff1a;【Unity Shader…

mac 卸载第三方输入法

输入法设置里的移除&#xff0c;并不是真的卸载&#xff0c;点击还是能添加回来 在活动监视器里强制退出此输入法在访达界面使用快捷键 ShiftcommandG在弹出的对话框内输入以下路径&#xff08;/资源库/Input Methods&#xff09;&#xff0c;再点击下面的前往找到你要卸载的输…

HadSky+内网穿透打造个人专属社区论坛并远程访问

文章目录 前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3 Cpolar稳定隧道&#xff08;本地设置&#xff09;2.4 公网访问测试 总结 前言 经过多年的基础…

盘点那些开发中经常用到的git命令

入职第一天 配置邮箱账号 git config —global user.email "XXXX" git config —global user.name "XXXX" 生成公钥 ssh-keygen -t rsa -C "你的邮箱"生成的文件默认在c盘:/用户/当前用户/.ssh文件夹下&#xff0c;也可以指定文件 打开git网页&…