Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来之后,许多其它语言中也出现了相似接口。html
WSGI区分为两个部分:一为“服务器”或“网关”,另外一为“应用程序”或“应用框架”。在处理一个WSGI请求时,服务器会为应用程序提供环境信息及一个回调函数(Callback Function)。当应用程序完成处理请求后,透过前述的回调函数,将结果回传给服务器。python
所谓的 WSGI 中间件同时实现了API的两方,所以能够在WSGI服务器和WSGI应用之间起调解做用:从Web服务器的角度来讲,中间件扮演应用程序,而从应用程序的角度来讲,中间件扮演服务器。“中间件”组件能够执行如下功能:git
实现该协议的模块:web
FBV——url —— 函数redis
CBV——url —— view数据库
什么是RESTful架构:django
(1)每个URI表明一种资源;json
(2)客户端和服务器之间,传递这种资源的某种表现层;api
(3)客户端经过四个HTTP动词,对服务器端资源进行操做,实现"表现层状态转化"。浏览器
1. 路由
2. 视图
3. 版本
4. 认证
写一个类并注册到认证类,在类的的authticate方法中编写认证逻辑。
5. 权限
写一个类并注册到权限类,在类的的has_permission方法中编写认证逻辑。
6. 频率限制
写一个类并注册到频率类,在类的的 allow_request/wait 方法中编写认证逻辑。
allow_request True False 若是返回False,那么就要执行wait
7. 解析器
根据ContentType请求头,选择不一样解析器对 请求体中的数据进行解析。
POST /index/ http1.1.\r\nhost:11.11.11.11\r\nContent-Type:url-formendo.... \r\n\r\nuser=alex&age=123
POST /index/ http1.1.\r\nhost:11.11.11.11\r\nContent-Type:application/json\r\n\r\n{....}
8. 分页
缘由:页码越大向后须要扫描的行数越多,由于每次都是从0开始扫描。
解决:
- 限制显示的页数 - 记录当前页数据ID最大值和最小值,再次分页时,根据ID现行筛选,而后再分页。
答案详解:TCP握手与挥手
用于操做内存的软件。
能够作持久化:
至关因而大字典
单进程单线程
select_related,连表操做,至关于主动作join
prefeth_related,屡次单表操做,先查询想要的数据,而后构造条件,如:id=[1,2,3],再次查询其余表根据id作条件。
only
defer
F
Q
经过ORM写偏原生SQL:
Entry.objects.extra(select={'new_id': "select col from sometable where othercol > %s"}, select_params=(1,)) Entry.objects.extra(where=['headline=%s'], params=['Lennon']) Entry.objects.extra(where=["foo='a' OR bar = 'a'", "baz = 'a'"]) Entry.objects.extra(select={'new_id': "select id from tb where id > %s"},select_params=(1,), order_by=['-nid'])
# 执行原生SQL models.UserInfo.objects.raw('select * from userinfo') # 若是SQL是其余表时,必须将名字设置为当前UserInfo对象的主键列名 models.UserInfo.objects.raw('select id as nid from 其余表') # 为原生SQL设置参数 models.UserInfo.objects.raw('select id as nid from userinfo where nid>%s', params=[12,]) name_map = {'first': 'first_name', 'last': 'last_name', 'bd': 'birth_date', 'pk': 'id'} Person.objects.raw('SELECT * FROM some_other_table', translations=name_map)
from django.db import connection, connections cursor = connection.cursor() # cursor = connections['default'].cursor() cursor.execute("""SELECT * from auth_user where id = %s""", [1]) row = cursor.fetchone() # fetchall()/fetchmany(..)
queryset = models.Course.objects.using('default').all()
进行版本控制,实现协同开发