4 django篇
Posted venicid
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4 django篇相关的知识,希望对你有一定的参考价值。
1、django请求生命周期
- wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架
(Flask、Django) - 中间件,帮助我们对请求进行校验或在请求对象中添加其他相关数据,例如:csrf、request.session
- 路由匹配 根据浏览器发送的不同url去匹配不同的视图函数
- 视图函数,在视图函数中进行业务逻辑的处理,可能涉及到:orm、templates => 渲染
- 中间件,对响应的数据进行处理。
- wsgi,将响应的内容发送给浏览器
2 WSGI / uwsgi / uWSGI
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
- WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
- uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
- 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
- uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西
3、中间件
中间件一般做认证或批量请求处理,django中的中间件,其实是一个类,在请求和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法,
如请求过来 执行process_request, view,process_response方法
说的直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,
使用中间件做过什么?
- 自定义
- 登录认证:不再需要在每个函数中添加装饰器
- 权限:当用户登录时候获取当前用户所有权限并放入session,然后再次访问其他页
面,获取当前url并在session中
进行匹配。如果没有匹配成功,则在中间件返回“无权访问”
- 跨域,
- jsonp,动态创建一个script标签。
- cors,设置响应头
应用:本地开始前后端分离的时使用。
4、Django、Tornado、Flask各自的优势
1.Django:Django无socket,django的目的是简便,快速开发,并遵循MVC设计,多个组件可以很方便的以“插件”形式服务于整个框架,django有许多功能强大的第三方插件。django具有很强的可扩展性。
2.Tornado:它是非阻塞式服务器,而且速度相当快,得力于其 非阻塞的方式和对epoll的运用,Future对象,
缺点:没有session,需要自定制
3.Flask:是一个微型的web框架,配合SQLALchemy来使用,jinja2模板, werkzeug接口
5、django怎么弄并发的
nginx+uwsig为django提供高并发,nginx的并发能力超过,单台并发能力过完,在纯静态的web服务中更是突出其优越的地方,由于底层使用epoll异步IO模型进行处理。
6、什么是ORM?
Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间做一个映射
ORM优缺点:
优点:摆脱复杂的SQL操作,适应快速开发,让数据结果变得简单,数据库迁移成本更低
缺点:性能较差,不适用于大型应用,复杂的SQL操作还需要通过SQL语句实现
7、cookie及session
cookie:是保留在客户端上面的一组键值对,cookie不是很安全,别人可以分析存放在本地的cookie
session:是保存在服务器上面的一组键值对,依赖与cookie,安全指数比cookie高
8、FBV和CBV本质是一样的,没有优劣之分,可根据不同的需求来使用
???视图
- FBV 基于函数的视图
l - 函数
- CBV 基于类的视图
l - view
9、跨域问题,同源策略?
????????????跨域是指从一个域名的网页去请求另一个域名的资源。浏览器出于安全的考虑,不允许不同源
的请求;
??????因为浏览器收到同源策略的限制,当前域名的js只能读取同域下的窗口属性。
??????同源策略:不同的域名, 不同端口, 不同的协议不允许共享资源,保障浏览器安全。
处理方法:
1、jsonp 跨域
创建一个回调函数,在远程服务上调用这个函数并且将JSON 数据形式作为参数传递,完成回调。
可以通过javascript动态的创建script标签,这样我们就可以灵活调用远程服务了
jsonp是json用来跨域的一个东西。原理是通过script标签的跨域特性来绕过同源策略。
?2、CORS 跨域
CORS 是在 es5 之后提出的跨域方案. 只需要在服务器配置一个跨域响应头接口
?允许你的域名来获取我的数据
response['Access-Control-Allow-Origin'] = "*"
2.允许你携带Content-Type请求头
?????????response[‘Access-Control-Allow-Headers‘] = "Content-Type"
3.允许你发送DELETE,PUT
???????????response[‘Access-Control-Allow-Methods‘] = "DELETE,PUT"
?3. 与jsonp相比的优点:
??????????????????1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。
??????????????????2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP
有更好的错误处理。
??????????????????3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经
支持了CORS。
10、http常见状态码
常见的状态码:
- 200????????????请求成功??OK
- 302????????????重定向,新的URL会在response 中的Location中返回,浏览器将会自动使用新
的URL发出新的Request ? - 304????????????代表上次的文档已经被缓存了, 还可以继续使用
- 400????????????客户端请求与语法错误,不能被服务器所理解
- 403????????????服务器收到请求,但是拒绝提供服务,比如没有找到cookie
- 404????????????请求资源不存在(输错了URL)
- 500????????????服务器发生了不可预期的错误
- 503????????????服务器当前不能处理客户端的请求,一段时间后可能恢复正常
11、HTTP请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
以上是关于4 django篇的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django Summernote 中显示编程片段的代码块?
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段