Django知识点综合
1.MVC框架
MVC的核心思想:解耦
MVC框架里面的三个模块:
- M:Model模型,和数据库进行交互。
- V:View视图,产生HTML页面。
- C:Controller控制器,接收请求,进行处理,与M和V进行交互,返回应答。
2.MVT
- M:Model模型。和MVC中的M功能相同,和数据库进行交互。
- V:View视图。和MVC中C功能相同,接收请求,进行处理,与M和T进行交互,返回应答。
- T:Template,模板。和MVC中V功能相同,产生HTML页面。
3.ORM
ORM 可以通过类和对象去操作他对应的表,不需要sql语句。
1 | Object:对象 - 类 |
4.F对象
作用:用于类属性之间的比较。
解释F:之前我们的查询都是对一个值进行比较,而F对象适用于跟一个 属性之间进行比较。
使用之前需要导入:
1 | from django.db.models import F |
例:查询阅读量大于评论量图书的信息。
1 | 使用F把表内字段 包起来就行了。 |
例:查询图书阅读量大于2倍评论量的图书信息。
1 | 直接在后面写 * 2 就OK |
5.Q对象
作用:用于查询是条件之间的逻辑。and or not ,可以对Q对象进行 &|~ 操作。
使用之前需要先导入:
1 | from django.db.models import Q |
Q | 所查询的对象需要被Q()包含 |
---|---|
| | 逻辑或 |
& | 和逻辑与 |
~ | 逻辑非 |
例:查询id大于3且阅读量大于30的图书信息。
1 | 普通方法 两个条件是逻辑与的关系。 |
例:查询id大于3或者阅读量大于30的图书信息。
1 | | 是逻辑或 用它连接Q的条件。 |
例:查询id不等于3的图书信息。
1 | ~ 不等于的意思, |
6.查询相关函数
get:返回一个且只能有一条数据,返回值是一个对象,参数可以写查询条件。
all:返回模型类对应表的所有数据,返回值是QuerySet.
filter:返回满足套件的数据,返回值是QuerySet,参数可以写查询条件。
exclude:返回不满足条件的数据,返回值是QuerySer,参数可以写查询条件。
order_by:对查询结果进行排序返回值是QuerySet,参数中写排序的字段。
1 | from django.db.models import F,Q,Count,Max,Min |
- F对象:用于类属性之间进行比较。
- Q对象:用于条件之间的逻辑关系。
- aggregate:进行聚合操作,返回值是一个字典,进行聚合的时候,需要先导入聚合类。
- count:返回结果集中数据的目的,返回值是一个数字。
注意:
对一个QuerySet实例对象,可以据需调用上面的所有函数。
注意:
- 通过模型类实现关联查询时,要查那个表中的数据,就需要通过那个类来查。
- 写关联查询条件的时候,如果类中没有关系属性,条件需要对应类的名,如果类中有关系属性,直接写关系属性。
9.查询集
all 、 filter 、 exclude 、 order_by 调用这些函数会产生查询集,QuerySet类对象可以继续调用上限所有函数。
- 惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据的真正查询。
- 缓存:当使用的是统计一个查询集的时候,第一次的时候就会发生实际数据库的查询,然后把结果缓存起来,之后在使用这个查询集的时候,使用的是缓存的结果。
限制查询集:
可以对一个查询集进行去下表或者切片操作来限制查询集的结果。
对一个查询集进行切片操作会产生一个新的查询集,下表不允许为负数。
取出查询集第一条数据的两种方式:
方式 | 说明 |
---|---|
b[0] | 如果 b[0] 不存在,就会抛出一个 IndexError异常。 |
b[0:1].get() | 如果 b[0:1].get() 不存在,就会抛出DoesNotExist异常。 |
exists:来判断一个查询集中是否有数据。 True False
10.抽象基类
抽象基类在你将一些共同信息导入到多个其他模型的时候很有用。
你写你的基类,并在Meta类(元类)中设置abstract=True。该模型不用于生成任何数据库表。反而,当抽象基类用于其他模型的一个基类是,它的fields(字段)会被添加到那些子类中。
11.url配置过程
- 在项目的urls 文件中包含具体应用的urls 文件,在具体应用的urls文件中包含具体url和视图的对应关系。
- url配置项是定义在一个叫 urlpatterns 的列表中,其中每一个元素就是一个配置项,每一个配置项都调用urlh函数。
12.属性
- path :一个字符串,表示请求的页面的完整路径,不包含域名和部分参数。
- method : 一个字符串,表示请求使用的HTTP方法,常用值包括 GET 、POST 。
- 在浏览器中给出地址发请求采用get方式,如超链接。
- 在浏览器中点击表单的提交按钮发起请求,如果表单的method设置为post则为post请求。
- encoding : 一个字符串,表示提交的数据编码方式。
- 如果为None则表示使用浏览器的默认设置,一般为utf-8.
- 这个属性是可写的,可以通过修改它来访问表单数据使用的编码,接下来对属性的任何访问将使用鑫的encoding值。
- GET :QueryDict类型对象,类似与字典,包含get请求方式所有参数。
- POST:QueryDict类型对象,类似于字典,包含post请求方式的所有参数。
- FILES : 一个类似于字典的对象,包含所有上传文件。
- COOKIES : 一个标准的Python字典,包含所有cookie,键和值都为字符串。
- session : 一个既可以读 又可以写的类似于字典的对象,表示当前的话,只当有Django 启用绘画的支持时才可使用,详情内容见 “状态保持”。
- 运行服务器,在浏览器中浏览首页,可以在浏览器“开发者工具”中看到下图:
13.cooie的特点:
以键值对方式进行存储。
通过浏览器访问一个网站时,会将浏览器存储的跟网站相关的所有cookie信息发送给网站的服务器。request.COOKIES
(你去买烧饼,你去买烧饼,你只会把买少烧饼的单子给他 你肯定不会把卖豆浆的单子也起给他)
cookie 是基于域名安全的。
cookie是有过期时间的,如果不指定,默认关闭浏览器之后 cookie就会过期。
14.session的特点:
- session是以键值对进行存储的。
- session依赖于cookie。唯一的标识码保存在sessionid cookie 中。
- 问:所有请求者的session 都会存储在服务器中,服务器如何区分请求者和session的数据对应关系呢?
- 答:在使用session后,会在Cookie中存储一条sessionid的数据,每次请求时浏览器都会将这个数据发给服务器,服务器接收sessionid后,会根据这个值找到这个请求者的session.
- 结果如果想使用session,浏览器必须支持cookie,否则就无法使用session了。
- 存储session时,键与Cookie中的sessionid相同,值是开发人员设置的键值对信息进行了base64编码,过期时间有开发人员设置。
- session 也是有过期时间的,如果不指定,默认就会两周过期。
15.cookie和session的应用场景
Cookie:
- 记住用户名。
- 保存在浏览器端。
- 对于安全性要求不高的数据可以使用cookie进行保存。
session:
- 记住用户的登录状态
- 保存在服务器端
- 对于安全性要求比较高的,比如用户银行卡等信息使用session进行保存。
16.HTML转义
什么是HTML转义?
通过模板上下文,传递给模板文件的数据里面含有,大于小于单引号双引号和and符号的话,他在显示的时候会进行一个转义。
应用场景:
后期做项目,编辑商品详情信息的时候通常是由后台管理员进行编辑,通常我们会某个字体设置一些格式,比如加粗,加标题,这部分你内容 保存在数据库就是保存html的内容。
在模板上下文中的html标记默认是会被转义的。
17.csrf攻击
跨站伪造
- 在进行网站开发的时候,有些页面是用户登陆之后才可以访问的,假如用户访问了这个地址,需要进行登陆的判断,如果用户登陆了话,可以进行后续的操作,如果没有登陆,跳转到登陆页面。
18.django防止csrf的方式:
默认打开csrf中间件。
表单post提交数据的时候加上:
1
{% csrf token %} 标签
#
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com