Django
Django请求流程
1.用户通过浏览器发送请求
2.请求到达request中间件,中间件对request请求做预处理或者直接返回response
3.若未返回response,会到达urlconf路由,找到对应视图函数
4.视图函数做相应预处理或直接返回response
5.View中的方法可以选择性的通过Models访问底层的数据
6.取到相应数据后回到django模板系统,templates通过filter或tags把数据渲染到模板上
7.返回response到浏览器展示给客户
上述流程中最主要的几个部分分别是:Middleware(中间件,包括request, view, exception, response),URLConf(url映射关系),Template(模板系统
注重高效开发
全自动化的管理后台(只需要使用起ORM,做简单的定义,就能自动生成数据库结构,全功能的管理后台)
session功能
django的优点在于 大和全 ,orm,template,view 都自带了。需要的功能也可以去找第三方的app。 缺点嘛也就是自身的一些缺点,template不怎么好用,数据库用nosql不方便等。
注重性能优越,速度快
解决高并发
异步非阻塞
websockets 长连接
内嵌了HTTP服务器
单线程的异步网络程序,默认启动时根据CPU数量运行多个实例;利用CPU多核的优势。
tornado的模板感觉更简单点。而且请求处理是基于回调的非阻塞调用,这样能提高并发量。 模板和数据库部分有很多第三方的模块可供选择,这样不利于封装为一个功能模块。缺点倒也不至于,因为本来就打算成为一个轻量级的框架吧
1.要性能, Tornado 首选;要开发速度,Django 和 Flask 都行,区别是 Flask 把许多功能交给第三方库去完成了,因此 Flask 更为灵活。
3.Django适合初学者或者小团队,Tornado适合高度定制。
Django是基于python的web框架,直接使用了WSGI,
用于创建模型的对象关系映射(orm), URL 设计,正则匹配网址,
缓存系统,与memcached或其它的缓存系统联用,更出色的表现,更快的加载速度。
架构设计:django是一个基于MVC构造的框架,即模型model,视图view和控制器controller。
django 里更关注的是模型model、模板template和视图views,称为 MTV模式。
模型model:数据存储层。处理与数据相关的事物。
视图views:表现层。定义一些方法,处理业务逻辑,如何在前端页面进行数据显示。
模板template:业务逻辑层。模型与模板的桥梁。
高内聚,低耦合
高内聚:一个模块内部一个功能
低耦合:每个模块各司其职,尽量零关联。
如果是正式启动的新项目,建议用 django 1.11
django-admin startproject test1
python manage.py startapp booktest
python manage.py makemigrations
python manage.py migrate
1.1.3.6测试数据操作 python manage.py shell
python manage.py runserver ip:port
python manage.py createsuperuser,按提示输入用户名、邮箱、密码
Orm的理解:
ORM是“对象-关系-映射”的简称,
1.根据对象的类型生成表结构
2.将对象、列表的操作,转换为sql语句
3.将sql查询到的结果转换为对象、列表
在站点的 __init__.py 文件中添加
import pymysql
pymysql.install_as_MySQLdb()
4.属性命名限制
a)不能是python的保留关键字
b)由于django的查询方式,不允许使用连续的下划线
关系的类型包括:
1.ForeignKey:一对多,将字段定义在多的端中
2.ManyToManyField:多对多,将字段定义在两端中
3.OneToOneField:一对一,将字段定义在任意一端中
用一访问多:对象.模型类小写_set
bookinfo.heroinfo_set
用一访问一:对象.模型类小写
heroinfo.bookinfo
访问id:对象.属性_id
heroinfo.book_id
1.2.4模型查询 :
a)查询集
b)字段查询:比较运算符,F对象,Q对象
8.查询集的缓存
构成了两个查询集,无法重用缓存
两次循环使用同一个查询集,第二次使用缓存中的数据
自链接
class AreaInfo(models.Model):
atitle = models.CharField(max_length=20)
aParent = models.ForeignKey('self', null=True, blank=True)
上级对象:area.aParent
下级对象:area.areainfo_set.all()