流程分析
克隆项目代码和初始流程分析 https://gitee.com/jackfrued/zufang
把别人的项目添加到自己的仓库
git clone --depth SSH地址 克隆此项目的最新版本
python3.6安装 --------------> https://www.cnblogs.com/aidenzdly/p/11351316.html 若软连接已经存在则到 etc目录下进行删除 python目录
前后端分离开发
接口文档
数据库设计 ER图 --------------> 物理模型图
数据库的设计是非常重要的 StarUML PowerDesigner
.gitignore 文件 --------> 版本控制的忽略文件 gitignore.io 自动生成版本忽略文件
ssh-keygen -t rsa -b 2048 -C "邮箱" 生成SSH密钥对 cd .ssh
创建虚拟环境
pip install -r requirements.txt -i https://pypi.doubanio.com/simple
pipenv install
pipenv shell
pip check 检查依赖项是否有冲突
使用docker 部署应用,虚拟化的容器技术,带着操作系统环境去装软件
yum update
yum install/info/search/remove
ubuntu 启动服务 service docker start/status/stop
docker pull mysql/redis/nginx
修改 docker 镜像源 cat /etc/docker/daemon.json
netstat -nulp/-ntlp udp tcp
80 443 端口 http https,其他端口都不开放
跳板机服务器 22 端口打开
连接数据库不要使用root用户,新创建一个user
flush PRIVILEGES ; create user ‘zzz‘@‘%‘ identified by ‘123456‘; grant all privileges on zufang.* to ‘zzz‘@‘%‘;
用户名密码需要放到环境之中
字符串,字节串
github issues 错误 缺陷管理系统 ---->禅道 敏捷闭环工具
把创建好的表变成模型 反向工程 ---------> python manage.py inspectdb > common/model.py
数据库里的唯一索引 unique_together
容器数据持久化,docker数据卷操作
数组机
需要设置口令才能连接数据库 需要把主机的mysql服务停掉 docker run -d -p 3306:3306 --name zylmysql -e "MYSQL_ROOT_PASSWORD=123456" mysql:5.7.29 mysql -u root -p 连接数据库 select version() 查看数据库版本 测试,建立测试数据库文件夹 mkdir -p docker/mysql/{conf,data} 保留数据 数据卷操作 映射数据和数据库配置 docker run -d -p 3306:3306 -v /root/docker/mysql/conf:/etc/mysql/mysql.conf.d -v /root/docker/mysql/data:/var/lib/mysql --name zylmysql -e "MYSQL_ROOT_PASSWORD=123456" mysql:5.7.29
连接数据库要使用强口令
数据库表中,auto_now_add = True 自动添加创建的时间
百分号编码 -------------> URL http请求报文中,请求行,请求头不能出现非 ASCII 字符,若出现,则需要进行百分号编码(from urllib.parse import quote/unquote)
from urllib.parse import quote, unquote name = ‘张云雷‘ print(quote(name)) print(unquote(quote(name)))
%E5%BC%A0%E4%BA%91%E9%9B%B7 张云雷
MD5 --------------------------->哈希摘要
import hashlib class User(): username = None _password = None @property def password(self): print("GETTER") # return self._password raise Exception("Can‘t access") @password.setter def password(self, pwd): print("SETTER") #密码加密 self._password = hashlib.new("md5", pwd.encode("utf-8")).hexdigest() #密码判断 def verify_password(self, pwd): return self._password == hashlib.new("md5", pwd.encode("utf-8")).hexdigest() if __name__ == ‘__main__‘: user = User() user.username = "Jack" user.password = "110" print(user.username) print(user.password) print(user.verify_password("111"))
MD5 SHA1 SHA256 哈希算法(散列算法)
对象 --- hash算法 --- 标识符 验证对象有没有伪造或者被篡改,对象签名或者对象指纹
彩虹表攻击,反向字典攻击 ----------> 王小云
hashlib应用
import hashlib print(hashlib.new(‘md5‘,‘sss‘.encode(‘utf-8‘)).hexdigest())
验证文件的完整性
import hashlib with open(‘Python.tar‘,‘rb‘) as fp: print(hashlib.new("md5",fp.read().encode("utf-8")).hexdigest())
fp.read()会造成服务器内存的开销很大,下面这种做法是正确的
with open(‘Python.tar‘,"rb") as fp: data = file.rea(512) while data: hasher.update(data) data = file.read(512)
使用生成器/迭代器
hasher = md5() with open("Python.tar","rb") as fp: file_iter = iter(lambda : file.read(2048),b"") for data in file_iter: hasher.update(data) print(hasher.hexdigest())
关系型数据库保证数据的完整性的?
1,实体完整性 ----主键,唯一索引
2,参照完整性,外键来保证
3,域完整性,数据库中的都是有效数据/非空约束/类型长度/默认值约束
restrict
假删除操作
公共字段 create_time/ update_time/ deleted(True,False)
跨库查询
related_name = "+" ------------> 反查属性 防止属性的冲突,避免在有多个外键的情况下
接口文档 rap2.taobao.org