流程分析

克隆项目代码和初始流程分析 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

相关推荐