1.Django HTTP请求的处理流程:
(1)初始化init
:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件
(2)处理请求前process_request
:在每个请求上,request 对象产生之后,url 匹配之前调用,返回 None 或 HttpResponse 对象。
(3)处理视图前process_view
:在每个请求上,url 匹配之后,视图函数调用之前调用,返回 None 或 HttpResponse 对象。
(4)处理模板响应前process_template_response
:在每个请求上调用,返回实现了render方法的响应对象。
(5)处理响应后process_response
:视图函数调用之后,所有响应返回浏览器之前被调用,在每个请求上调用,返回 HttpResponse 对象。
(6)异常处理process_exception
:当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse 对象
一个 HTTP 请求,首先被转化成一个 HttpRequest 对象,然后该对象被传递给 Request 中间件处理,如果该中间件返回了Response,则直接传递给 Response 中间件做收尾处理。
否则的话 Request 中间件将访问 URL 配置,确定哪个 view 来处理,在确定了哪个 view 要执行,但是还没有执行该 view 的时候,系统会把 request 传递给 view 中间件处理器进行处理,如果该中间件返回了 Response,那么该 Response 直接被传递给 Response 中间件进行后续处理,
否则将执行确定的 view 函数处理并返回 Response,在这个过程中如果引发了异常并抛出,会被 Exception 中间件处理器进行处理。
2.正向代理和反向代理
使用 Nginx 主要是为了实现分流、转发、负载均衡,以及分担服务器的压力。Nginx 部署简单,内存消耗少,成本低。Nginx 既可以做正向代理,也可以做反向代理。
正向代理:请求从局域网发出,经过代理服务器转发,然后到达互联网上的服务器。
特点:服务端并不知道真正的客户端是谁。
反向代理:请求从互联网发出,先进入代理服务器,再转发给局域网内的服务器。
特点:客户端并不知道真正的服务端是谁。
区别:正向代理的对象是客户端。反向代理的对象是服务端。
3.redis 和 mongodb、mysql的差异和应用场景
-
1.持久化:
redis:内存型数据库,持久化方式RDB和AOF。
mongodb:数据保存在硬盘,通过mmap映射到内存的某块区域
mysql:数据存储在硬盘,可以持久化保存数据。使用的时候才交换到内存中。 -
2.类型:
关系型:mysql,定义表与表之间的关系需要使用关系型数据库,开源免费。数据库-表-记录
非关系型:redis、mongodb====>数据库-集合-文档,采用结构型数据存储
-3 数据量和性能
物理内存够用:redis>mongodb>mysql
物理内存不够:redis和mongodb都会使用虚拟内存
物理内存和虚拟内存都不够用,就得考虑mysql
- 4.部署
redis一般推荐主从部署
mongodb一般推荐集群部署
mysql主从同步和读写分离
-5.应用场景
redis:排行榜、计数器、发布订阅、缓存、消息队列
mongodb:大数据量的存储,不需要支持事务的场景、存储商品属性等
mysql:记录不同数据之间的关联关系,银行会计系统(事务的支持)
5.union和union all区别
作用::对插叙的结果进行联合显示
union:对结果去重和排序
union all:不去重不排序
效率:union all不排序去重所以比union快
6.前端js中获取标签属性
-
- prop()和val()都能获取到文本框的实际value值,而attr()获取的则始终为文档结构中的value的属性值,与文本框实际值无关,并不会变化。
-
- 固有属性使用prop().自定义属性使用attr()
7.js数组和字符串的操作
数组:
增加:push(),splice(从哪开始,删几个,新增的元素)
删除:pop()
修改:splice(从哪开始,删几个,新增的元素)
取值:根据索引取值,同python列表操作
长度:alist.length
利用分隔符合并成字符串:alist.join(’-’)
反转:reverse()
取索引:indexOf() 返回数组中元素第一次出现的索引值
字符串:
合并:+
数字字符串转整数:parseInt(数字字符串,转成几进制默认10进制)
数字字符串转小数:parseFloat()
把一个字符串分隔成字符串组成的数组:split()
查找字符串是否含有某字符:indexOf()
截取字符串:substring(start,end)(不包括end)
,类似python的切片
8.css选择器优先级
1.在属性后面使用 !important 会覆盖页面内任何位置定义的元素样式。
2.作为style属性写在元素内的样式
3.id选择器
4.类选择器
5.标签选择器
6.通配符选择器
7.浏览器自定义或继承
总结排序:!important > 行内样式>ID选择器 > 类选择器 > 标签 > 通配符 > 继承 > 浏览器默认属性