相对导入和绝对导入
# 绝对导入---》绝对指的是 环境变量 sys.path 里面的路径,项目跟路径在pycharm自动加入环境变量
# 相对导入---->一个py文件中如果使用相对导入,这个文件不能以脚本运行
django国际化配置
# django 国际化---》配置文件改
# 国际化相关
LANGUAGE_CODE = 'zh-hans'
#时区:改成东八区
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
models 的级联删除相关
'''
on_delete可以选择的请情况
-models.CASCADE 级联删除
-models.SET_NULL 关联字段置为空 null=True
-models.SET_DEFAULT 关联字段设为默认值 default=0
-models.DO_NOTHING 由于数据库有约束会报错,去掉外键关系(公司都不建立外键)
-on_delete=models.SET(值,函数内存地址) 设置上某个值,或者运行某个函数
'''
原生django,如何向响应头写数据
def test(request):
obj=HttpResponse('ok')
# obj=render()
# obj=redirect('/index')
# obj=JsonResponse()
obj['xxx']='ooo' #直接放
return obj
序列化,host,断言,
1 # 浏览器输入地址 www.taobao.com----》dns(本地,网络)(host文件)查找 ip地址--》向这个地址的80端口发送请求(没写端口就是80)
2 序列化的时候,如果传了many=True,生成的序列化类对的对象是ListSerializer的对象
3 assert 断言 本质就是if+抛异常
a = 11
# if a!=10:
# raise Exception('a必须是10,不然不能往后走')
assert a == 10, ('a必须是10,不然不能往后走')
print(a)
语言的不同点
# python 是动态强类型语言
# go 是静态强类型语言
# java 是静态强类型语言---》隐士类型转换
# js 是动态弱类型语言
# 动态:解释型语言
# 强弱指的是:数据类型强:不同类型之间不允许之间运算
# 弱类型:不同类型之间不需要转换可以之间运算
对称加密与非对称加密
# 加密:对称加密 非对称加密
-加密和解密都使用同一个秘钥
-加密用公钥,解密用私钥
装饰器
# 装饰器
-函数装饰器
-装饰函数的
-无参装饰器
-有参装饰器 #指的是装饰器有参,无参,不是被装饰的函数
-模板
def auth(func):
def inner(*args,**kwargs):
# 逻辑
res=func(*args,**kwargs)
# 逻辑
return res
return inner
@auth #add=auth(add)--->add=inner---->现在的add就是inner
def add(a,b):
return a+b
add(1,2)---->inner(1,2)
-类装饰器
-第一种:加在类中方法上的装饰器
-第二种:类作为装饰器
class Person:
def __init__(func):
self.func=func
def __call__(*args,**kwargs)
# 逻辑
res=self.func(*args,**kwargs)
# 逻辑
return res
@Person # add=Person(add)---->add变成了Person的对象
def add(a,b):
return a+b
add(1,2)--->person(1,2)
cgi fastcig WSGI uwsgi uWSGI与接口幂等性,中间件
1 cgi fastcig WSGI uwsgi uWSGI
# cgi:通用网关接口(Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准。
一句话总结: 一个标准,定义了客户端服务器之间如何传数据
# fastcig:快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本
一句话总结: CGI的升级版
常用的fastcgi软件:
Apache HTTP Server (部分)
Nginx(主流):nginx是一个符合fastcgi协议的软件,处于浏览器和web程序之间,主要做请求转发和负载均衡,也可以称之为服务器中间件
Microsoft IIS
# WSGI:Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口
一句话总结: 为Python定义的web服务器和web框架之间的接口标准
wsgiref:性能很低,python实现的,djgno内置了,测试阶段用,上线不用
uWSIG:性能高,c实现的
gunicorn:python实现的
# uWSGI: 符合wsgi协议的web服务器,上面标准的具体实现
# uwsgi:uWSGI服务器,自有协议
2 接口幂等性
-幂等性:多次操作的效果跟一次操作是一样的
-多次调用接口,跟调用一次效果一样
-哪些接口天然就是幂等性的?
-get
-put
-delete
-post新增数据,不是接口幂等的,对不符合幂等性的接口,进行处理
-如何解决:
-方式一:通过唯一字段解决,像注册接口,让用户名唯一
-方式二:前端点击以后,按钮失效,只能点一次
-方式三:(主流)token机制
1、哪些接口存在幂等问题的,就必须在执行业务前,先去获取token,服务器会把token保存到redis中。
2、然后调用业务接口请求时,把token携带过去,一般放在请求头部。
3、服务器判断token是否存在redis中,存在表示第一次请求,然后删除token,继续执行业务。
4、如果判断token不存在redis中,就表示是重复操作,直接返回重复标记给client,这样就保证了业务代码,不被重复执行
3 中间件
-介于a和b之间的东西都称之为中间件
-服务器中间件:nginx,apache
-数据库中间件:介于应用程序和数据库之前的, MyCat
-消息队列中间件:kafka,rabbitmq,Rocketmq
接口性能
# 接口性能指标
# qps:Queries Per Second,每秒查询率,一台服务器每秒能够响应的查询次数
# tps:Transactions Per Second,是每秒处理的事务数,包括一条消息入和一条消息出,加上一次用户数据库访问
#并发量:
系统同时处理的请求或事务数,可以直接理解为:系统同时处理的请求数量
QPS = 并发量 / 平均响应时间
并发量 = QPS * 平均响应时间
例如当前系统QPS为1w,每个请求的响应时间都是2s,那么并发量就是2w
# PV
PV(Page View):页面访问量,即页面浏览量或点击量,用户每次刷新即被计算一次。可以统计服务一天的访问日志得到。
# UV
UV(Unique Visitor):独立访客,统计1天内访问某站点的用户数。可以统计服务一天的访问日志并根据用户的唯一标识去重得到。
# DAU(日活)
DAU(Daily Active User),日活跃用户数量。常用于反映网站、app、网游的运营情况。
DAU通常统计一日(统计日)之内,登录或使用了某个产品的用户数(去除重复登录的用户),与UV概念相似
# MAU(月活)
MAU(Month Active User):月活跃用户数量,指网站、app等去重后的月活跃用户数量
# 你写的接口,qps应该是多少?
几十到一百多一点
# 解释型语言
-python解释器
-js 解释型语言----》浏览器中有---》只能运行在浏览器中
-于是就有大神---》把谷歌浏览的v8引擎(js解释器),抠出来---》能够运行在操作系统之上+c写了底层库---》node js
# pycharm中装vue插件
-setting---》plugins---》下载,重启