FastAPI框架入门(六)、HTML、CSS基本、
MarkDown的新学快捷键
1、 减号加空格,列表。
使用 tab建,往下一级,
shift + tab 返回上一级
2、插入图片时自动保存到指定目录
3、Pyhton 目录的文件
C:\Python39
- python.exe 就是我们的解释器。
- Scripts
- pip.exe 帮助我们以后安装第三方包。
- Lib Python内置的源码
- 文件/文件夹 Python提供的内置功能
- site-packages 通过pip去安装第三方的包时,他就会放在这个目录。
cmd 运行
python + c:/xxx.py(拖过去也可以)
# 一些没记住的
improt os
os.listdir(./xxx)
# 1比特, 8个比特等于一个字节,1kb等于1024个字节,3个字节一个中文字符(UTF-8)。
# isdecimal,判断字符串里面是不是整数。
# startswith和endswith,判断字符串是以xx开头或xx结尾。
# strip/lstrip/rstrip,去除空白(空格、换行符\n、制表符\t) replace,替换
# join拼接字符串,列表中必须都是字符串。“,”.join(list)
# 字符转字节:data.encode("utf-8") 转回来data.decode()
# 长度的补足
name = "宁摆场"
text = name.center(13,"*") # "*****宁摆场*****"
name = "宁摆场"
text = name.ljust(13,"#")
print(text) # "宁摆场##########" 还有rjust
# 长度的补足 name.zfill(10),长度为10 不足0补 只能左补:"0000000卢红萍"
# 倒序,for i in range(len(message)-1, -1, -1):
# 列表,索引插入 user_list.insert(1,"孟东珏") 列表的sort()操作在原列表进行。
# 随机去user_list列表中抽取一个数据 data = random.choice(user_list)
# 列表弹出 user_list.pop(1) 清空列表:list.clear()
# 列表和字典,不能做键值,因为不可哈希。
# 字典的get方法:v3 = info.get("email", "xxx") # 当键不存在时,v3 = "xxx"
# dict.keys()(.values()) 取出键,做列表(高防的列表) .items()取键值对
# 删除键值对 del info["k2"]
# 集合添加元素,,用 .add() 删除 v1.discard(11) 交集 v1.intersection(v2) 并集 v1.union(v2)
# 差集 v1.difference(v2) 表示 v1 - v2
2、 文件操作
# 1.打开文件
# - "unicom.txt" 文件路径
# - mode="wb" 写文件的模式打开
file_object = open("unicom.txt", mode="wb")
# 2.写内容
name = "武沛齐" # unicode
file_object.write( name.encode("utf-8") )
# 3.关闭文件
file_object.close()
# ab,文件不存在,则创建文件;存在则打开文件,写内容时,永远写的文件的尾部
file_object = open("xxxx.txt",mode="ab")
# 读取文件内容
# 1.打开文件
file_object = open("user.txt", mode='rb')
# 2.读取文件的所有内容
data = file_object.read()
data_string = data.decode('utf-8')
print(data_string) # 是一个大字符串
# 3.关闭文件
file_object.close()
# 读取大文件时
file_object = open("user.txt", mode='rb')
# 2.读取大的文件时,可以逐行去读取
line1 = file_object.readline()
readline()可以用于读取非常大的文件,因为它每次只加载一行,而readlines()会一次性加载整个文件,如果文件太大而内存又不够,将会导致程序崩溃。
函数传参:
# def func(*a1): 一个星号以元组给a1,两个星号以字典给a1
# pip install -r requirements.txt
3、
import random
# 1.获取随机的整数
v1 = random.randint(1, 20) # 大于等于1; 小于等于20
print(v1)
# 2.获取随机的小数
v2 = random.uniform(1, 10)
print(v2)
# 3.随机抽取1个数
data_list = [11, 22, 33, 44, 55]
v3 = random.choice(data_list)
print(v3)
# 4.随机抽取多个数
data_list = [11, 22, 33, 44, 55]
v4 = random.sample(data_list, 3)
print(v4)
# 5.打乱顺序
num_list = [i for i in range(100)]
random.shuffle(num_list)
print(num_list)
JSON文件知识
1、本质上:是一种数据格式,字符串形式。
用处:让不同编程语言之间实现数据传输。
# 处理中文的时候
import json
info = {"name": "邱恩婷", "age": 19}
v1 = json.dumps(info, ensure_ascii=False)
print(v1) # {"name": "邱恩婷", "age": 19}
# 2.停止N秒,再继续运行
while True:
print(1)
time.sleep(1)
# 时间格式的
import datetime
v1 = datetime.datetime.now()
request模块
让我们可以通过代码想某些地址发送网络请求,然后我们就可以获取到结果。
HTML、CSS相关基础。
网络请求
- 在浏览器的URL中写入地址,点击回车,访问。
浏览器会发送数据过去,本质上发送的是字符串:
"GET /explore http1.1\r\nhost:...\r\nuser-agent\r\n..\r\n\r\n"
浏览器会发送数据过去,本质上发送的是字符串:
"POST /explore http1.1\r\nhost:...\r\nuser-agent\r\n..\r\n\r\n数据库"
-
浏览器向后端发送请求时
-
GET请求【URL方法 / 表单提交】
-
现象:GET请求、跳转、向后台传入数据数据会拼接在URL上。
https://www.sogou.com/web?query=安卓&age=19&name=xx
注意:GET请求数据会在URL中体现。
-
-
POST请求【表单提交】
- 现象:提交数据不在URL中而是在请求体中。
-
页面上的数据,想要提交到后台:
- form标签包裹要提交的数据的标签。
- 提交方式:
method="get"
- 提交的地址:
action="/xxx/xxx/xx"
- 在form标签里面必须有一个submit标签。
- 提交方式:
- 在form里面的一些标签:input/select/textarea
- 一定要写name属性
<input type="text" name="uu"/>
- 一定要写name属性
css,专门用来“美化”标签。
缓存数据库Redis
1、连接数据库的方法,
redis这个包,
redis.redis.ConnectionPool 去创建连接池
redis.StrictRedis去接受依赖,对redis数据进行处理
2、把 连接池给,,app.state 通过这个去调用。
中间件—Cookie----Session
一、共同之处:
cookie和session都是用来跟踪浏览器用户身份的会话方式。
Cookie的工作原理
(1)浏览器端第一次发送请求到服务器端
(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie
(4)服务器端通过Cookie中携带的数据区分不同的用户
cookie数据保存在客户端,session数据保存在服务端。
Session的工作原理
(1)浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端
(2)浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
(3)服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。
name为JSESSIONID的Cookie不存在(关闭或更换浏览器),返回1中重新去创建Session与特殊的Cookie
name为JSESSIONID的Cookie存在,根据value中的SessionId去寻找session对象
value为SessionId不存在**(Session对象默认存活30分钟)**,返回1中重新去创建Session与特殊的Cookie
value为SessionId存在,返回session对象
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
(4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
(5)所以:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中
PBAC权限设置—JWT令牌
1、为了达成不同账号(员工、总裁)登录系统后看到不同页面,执行不同功能,RBAC(Role-Based Access control)权限模型,就是根据角色的权限,分配可视页面。