C:处理请求逻辑
M:跟db交互,获取数据,返回给C (ORM)
V:试图
目的:解耦
M:模型 对应M
V:视图 C
T:模板 V
虚拟环境:
不同的项目需要不同的包,如果所有项目在一个环境下。会出现无用的包
virtualenv 虚拟环境
virtualenvwrapper 虚拟环境的包
mkvirtualenv 创建虚拟环境
workon 切换虚拟环境
deactivate 退出虚拟环境
rmvirtualenv 删除
安装django
pip install django==1.11
项目包含多个应用
博客:项目
应用:用户模块----内容模块
创建项目
django-admin startproject 项目名
cd到项目里
python manage.py startapp 应用
注意:用pycharm创建的项目,不需要手动添加应用
ORM:对象---关系--映射
ORM的目的和好处:提高开发效率
缺点:牺牲项目执行效率
支持流行的数据库
ORM通过元类原理
元类:创建类的
object 元类
object 是元类创建出来的
元类继承object
M:
字段:支持很多字段
updtae_time = Datetime(auto_now =True)
create_time = Datetime(auto_now_add =True)
DateField[auto_now=False, auto_now_add=False]):日期。
参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。
参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false。
参数auto_now_add和auto_now是相互排斥的,组合将会发生错误。
七牛云: 原图---缩略图
索引:加快查询速度
mysql数据------
先取消索引-----导入----生成索引
创建索引:常用的查询字段
主键:就是索引
四大特性: 原子性,一致性,隔离性,持久性。
关系:
一对多
多对多
一对一
迁移:
python manage.py makemigrations 生成迁移文件
python manage.py migrate 执行迁移
模型管理器:objects
条件查询
属性__contains='xxx'包含
属性__isnull=True
属性__in=[1,3,5]
属性__gt,gte,lt,lte
不等于:.exclude(id=3)不等于3
F对象
之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢? 答:使用F对象。
Q对象
主要用于或
frist()
last()
查询集
特点:惰性查询
查询2次
from booktest.models import BookInfo
[book.id for book in BookInfo.objects.all()]
[book.id for book in BookInfo.objects.all()]
查询1次
list=BookInfo.objects.all()不查询
[book.id for book in list]查询并缓存
[book.id for book in list]遍历查询
限制查询集
不支持负数
关系
ForeignKey:一对多,将字段定义在多的一端中。
ManyToManyField:多对多,将字段定义在任意一端中。
OneToOneField:一对一,将字段定义在任意一端中。
自关联
ForeignKey('self',null=True,blank=True)#关系
自定义管理器-----默认的管理器就没有了
meta元选项,定义model类里面
视图:
两种方式:
函数:
类
404模板:定义templates
Debug=False
ALLOWED_HOSTS = ['*']
500模板:定义templates
视图函数报错
字典键不能重复
request:
GET:QueryDict类型对象,类似于字典,包含get请求方式的所有参数 支持一键多值
POST:QueryDict类型对象,类似于字典,包含post请求方式的所有参数 支持一键多值
FILES:一个类似于字典的对象,包含所有的上传文件。
COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串。存在浏览器中
session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django 启用会话的支持时才可用,详细内容见"状态保持"。
HTTP 无状态协议,为了知道这次浏览之前用户做了什么,所有才会出现cookie 键值对的形式。一些重要的信息不要存在cookie中,要放在session当中。cookie默认过期时间关闭浏览器,关闭就过期。可以设置一个多少秒过期,可以设置一个具体的时间过期
session存在服务器 ,redis mysql
默认过期时间两周
request.session.set_expiry(value)
如果value是一个整数,会话将在value秒没有活动后过期。
如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期。
如果value为None,那么会话永不过期。
session和cookie session依赖cookie cookie中保存着session的id
session一般做状态保持
HttpResponse
content:表示返回的内容。
charset:表示response采用的编码字符集,默认为utf-8。
status_code:返回的HTTP响应状态码。
content-type:指定返回数据的的MIME类型,默认为'text/html'。
set_cookie(key, value='', max_age=None, expires=None)
序列化:把对象转成内存可以储存的数据叫序列化
反序列化:把内存中的数据转成对象叫反序列化
JsonResponse是HttpResponse的子类
想要返回json
JsonResponse(json.dumps(字典))
HttpResponse(json.dumps(字典),content_type='application/json')
模板
当模版引擎遇到点如book.title,会按照下列顺序解析:
1.字典book['title']
2.先属性后方法,将book当作对象,查找属性title,如果没有再查找方法title()
3.如果是格式为book.0则解析为列表book[0]
for标签语法:
{%for item in 列表%}
循环逻辑
{{forloop.counter}}表示当前是第几次循环,从1开始
{%empty%}
列表为空或不存在时执行此逻辑
{%endfor%}
if标签语法
{%if ...%}
逻辑1
{%elif ...%}
逻辑2
{%else%}
逻辑3
{%endif%}
过滤器
参数
|过滤器名字:参数 参数
自定义过滤器
在应用中创建templatetages目录
模板继承
网友评论