Django

1.你了解哪些web框架,他们的特点和区别:

  首先我接触最多的是Django, Django它大而且比较全面,它里面有很多的组件比如 admin,form表单,ORM url等等,

它能够帮我们快速的开发。The web framework for perfectionists with deadlines.

  Flask是一个短小精悍的web框架,虽然他的提供的组件比较少,但是他的可扩展性很强,Flask做的最出色的是他的上下文管理
如果要开发小型的web网站可以用Flask快速的搭建起来,
要开发大型的web网站也可以但是需要用到比较多的插件,最后搭建起来跟Django可能差不多.


不同点:
Django的request是通过传参的形式传入视图函数
而flask的request是基于上下文管理的形式-->

 

2.Django的生命周期

客户端发起一个请求,请求进来到达了WSGI,

--WSGI

   WSGGI本质上就是一个socket服务端,他用来接收用户请求,并对请求做初次封装,

   然后请求到达Django程序之后会对请求进行二次封装,封装成了一个request对象(Django,Flask)

--中间件

  再经过Django的中间件,在经过Django中间件的过程中,对请求的数据进行校验和增加其他数据(比如session,csrf_token的认证)

--路由匹配

到达路由,路由匹配成功之后到达视图函数.

--视图函数

视图里编写业务逻辑,如果涉及到了了ORM或者模板,拿着模板和数据进行渲染

--中间件

然后再经过中间件对响应数据进行加工,加工完成之后

--WSGI

再经过WSGI发送给浏览器

 send_all

 

3.什么是WSGI?

  wsgi是web服务网关接口,说白了就是一套协议,

这套协议由(wsgiref,werkzwrg,和uwsgi模块来实现)

那么这些模块实现的本质是:创建Socket,并且监听请求,获取请求后将数据封装交给web进行处理

我们部署的时候不用wsgiref,因为速度比较慢,

我们常用的是uwsgi.

 

4.Django中间件是干什么的?

Django的中间件可以对所有的请求进行批量处理,在视图函数前后自定义自己的操作.

比如说权限控制,如果不希望所有的网页都有权限,那么可以在中间件中添加白名单.

 

5.你用中间件干了什么?中间件的应用

中间件可以干很多的事情,只要是想在视图函数执行前后自定制操作就可以了

我用中间件做过 CORS跨域/ 用户登录校验/权限处理/ CSRF/session/缓存 等等

权限是怎么实现的?

当用户登录的时候获取当前用户的所有权限放入session中,然后再次访问其他页面,获取当前url并在session中进行匹配

如果没有匹配成功,则在中间件中返回无权访问.

跨域的方法

-jsonp

  动态的的创建一个script标签.

  定义一个函数 函数名加括号触发一个函数

-cors

  设置响应头

  

 # 添加响应头
        # 允许你的域名来获取我的数据
        # 允许所有的域名来获取数据
        response['Access-Control-Allow-Origin']='*'

        # 允许你携带Content-Type请求头 如果要多的用逗号,隔开
        if request.method == 'OPTIONS':
            response['Access-Control-Allow-Headers']='Content-Type'

        # 允许你发送DELETE,和PUT
        response['Access-Control-Allow-Methods']='DELETE,PUT'

 

  应用:本地开发vue前后端分离的时使用.

 

 

6.中间件的5个方法

他要继承类: MiddlewareMixin

process_request 在请求自定制操作

process_response 在响应自定制操作

process_views CSRF就是在这里定制操作

 

7.路由系统

 路由系统,扫描路由,一旦它匹配到相应的视图就会跳出扫描并执行视图函数.

 

8.FBV和CBV

FBV 是英文Function base views 顾名思义就是视图函数用函数也构建业务逻辑

而CBV 是 class base views 是用类来构建业务逻辑

他们本质都是一样的,都是函数,只不过CBV在执行的时候会先走dispath方法进行反射

而CBV更适合写接口,因为CBV把方法分离到不同的方法类.业务逻辑更清晰

 

9.CBV的流程

在路由里CBV会先走as_view()方法.as_view()方法里会返回一个view函数名,

其内部是闭包的.一旦有用户访问就会执行view方法,然后执行dispath方法进行反射,

再走相应的方法.

 

posted @ 2018-07-26 09:35  R00M  阅读(161)  评论(0编辑  收藏  举报