django请求的生命周期?
- . 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端
请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中.- . url经过Django中的wsgi,再经过Django的中间件,最后url到过路由映射表,在路由中一条一条进行匹配,
一旦其中一条匹配成功就执行对应的视图函数,后面的路由就不再继续匹配了.- . 视图函数根据客户端的请求查询相应的数据.返回给Django,然后Django把客户端想要的数据做为一个字符串返回给客户端.
- . 客户端浏览器接收到返回的数据,经过渲染后显示给用户.
django的内置组件
- .Admin是对model中对应的数据表进行增删改查提供的组件
- .model组件:负责操作数据库
- .form组件:1.生成HTML代码2.数据有效性校验3校验信息返回并展示
- .ModelForm组件即用于数据库操作,也可用于用户请求的验证
列举django中间件的五个方法?以及django中间件的应用场景
- .process_request : 请求进来时,权限认证
- .process_view : 路由匹配之后,能够得到视图函数
- .process_exception : 异常时执行
- .process_template_responseprocess : 模板渲染时执行
- .process_response : 请求有响应时执行
简述什么是FBV和CBV?
FBV和CBV本质是一样的,基于函数的视图叫做FBV,基于类的视图叫做CBV
在python中使用CBV的优点:
- .提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
- .可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性
filter和exclude的区别?
两者取到的值都是QuerySet对象,filter选择满足条件的,exclude:排除满足条件的.
values和values_list的区别?
- values : queryset类型的列表中是字典
- values_list : queryset类型的列表中是元组
cookie和session的区别?
- .cookie:
cookie是保存在浏览器端的键值对,可以用来做用户认证- .session:
将用户的会话信息保存在服务端,key值是随机产生的字符串,value值是session的内容
依赖于cookie将每个用户的随机字符串保存到用户浏览器上- Django中session默认保存在数据库中:django_session表
- flask,session默认将加密的数据写在用户的cookie中
django的model中的ForeignKey字段中的on_delete参数的作用?
- 删除关联表中的数据时,当前表与其关联的field的操作
- django2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常
django中csrf的实现机制?
- 第一步:django第一次响应来自某个客户端的请求时,后端随机产生一个token值,把这个token保存在SESSION状态中;同时,后端把这个token放到cookie中交给前端页面;
- 第二步:下次前端需要发起请求(比如发帖)的时候把这个token值加入到请求数据或者头信息中,一起传给后端;Cookies:{csrftoken:xxxxx}
- 第三步:后端校验前端请求带过来的token和SESSION里的token是否一致。
什么是HTTP协议
http(Hypertext transfer protocol)超文本传输协议,通过浏览器和服务器进行数据交互,进行超文本(文本、图片、视频等)传输的规定。也就是说,http协议规定了超文本传输所要遵守的规则。
http请求报文组成
1)请求方法URI协议/版本
2)请求头(Request Header)
3)请求正文
http响应报文组成
1)状态行
2)响应头
3)响应正文
https协议和http协议的区别?
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
说一下对端口的理解
可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指 计算机内部 或 交换机 路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口都属于物理端口。
什么是mtv
Model(模型): 负责业务对象与数据库的对象(ORM)。
Template(模板):负责如何把页面展示给用户。
View(视图):负责业务逻辑,并在适当的时候调用Model和Template。
什么是wsgi
WSGI是一套接口标准协议/规范;
通信(作用)区间是Web服务器和Python Web应用程序之间;
目的是制定标准,以保证不同Web服务器可以和不同的Python程序之间相互通信
django请求的生命周期
Django的请求生命周期是指当用户在浏览器上输入url到用户看到网页的这个时间段内,Django后台所发生的事情
- 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中.
- url经过Django中的wsgi,再经过Django的中间件,最后url到过路由映射表,在路由中一条一条进行匹配, 一旦其中一条匹配成功就执行对应的视图函数,后面的路由就不再继续匹配了.
- 视图函数根据客户端的请求查询相应的数据.返回给Django,然后Django把客户端想要的数据做为一个字符串返回给客户端.
4. 客户端浏览器接收到返回的数据,经过渲染后显示给用户.
简述什么是FBV和CBV
一个url对应一个视图函数,这个模式叫做FBV(Function Base Views)
另外一种模式叫做CBV(Class Base views),即一个url对应一个类
什么是ORM
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
ORM在业务逻辑层和数据库层之间充当了桥梁的作用。
Orm和原生slq的优缺点
作用:帮助我们封装一下对数据库的操作,避免了我们写不太好维护的SQL的代码
优点:比较好维护,不用写那些复杂的sql语句
缺点:失去SQL的灵活性,并且越是通用的ORM框架,对性能的消耗就越大
Orm 操作values和values_list的区别
values()的结果得到的是一个字典形式的查询集QuerySet,查询集是一个可迭代对象
values_list()返回的是列表元组
什么是Cookie、如何获取、设置Cookie
cookie:存储数据,当用户访问了某个网站(网页)的时候,我们就通过cookie来向访问者电脑上存储数据
设置: response.set_cookie('my_cookie','cookie value')
获取:value = request.COOKIES["cookie_key"]
cookie和session的区别?
- cookie数据存放在客户的浏览器上,session数据放在服务器上.
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
3、设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话。
4、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie。
5、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。(Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型)
django中csrf的实现机制
django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。
1)启用中间件
2)post请求
3)验证码
4)表单中添加{% csrf_token%}标签
命令makemigrations和migrate的区别
makemigrations:将模型的更改生成迁移脚本文件。
migrate:将新生成的迁移脚本,映射到数据库中,创建新的表或者修改表的结构。
get请求和post请求的区别
POST和GET是HTTP协议定义的与服务器交互的方法。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息
1.post是取web页面中提交的值
2.get是从数据库中取值
GET是通过URL传给服务器的,POST是通过HTTP头传给服务器的,post的数据是不跟在请求的url后,而是在http头中,get是在url中
谈谈你对restful规范的认识
(1) 每一个URL代表一种资源
(2) 客户端与服务器之间,传递这种资源的某种表现层
(3) 客户端通过 4 个HTTP动词,对服务器端资源进行操作,实现“表现层状态转化”
QueryDict和dict区别
Querydict :可以一键对应多个值
dict :只能一键对应一个值
Django 本身提供了 runserver,为什么不能用来部署
runserver 方法是调试 Django 时经常用到的运行方式,它使用 Django 自带的