django

什么是django

django是一款基于MVT(模型,视图,模板)的前后端分离的web应用模式。其中前后端分离是指后端只是通过API提供数据给前端,具体前端的展现形式由前端自己确定,而不再是传统的前端数据由后端控制,后端返回渲染页面或者重定向页面的方式。
django rest frame是django的一个第三方扩展库,它使得在django上开发具有restful风格的API变成一件很轻松容易的事

  1. django实现全自动话的后台管理,只需要定义相应的对象就可以构建数据库表结构
  2. 前后端分离

视图类做的三件事

  1. 将请求数据转化为模型类对象
  2. 进行数据库的操作
  3. 将模型类对象转化为要响应的数据

序列化和反序列化

序列化是指将程序中的一个数据类型转化为其他类型数据如:json等
反序列化是指将其他类型数据转化为程序中的数据类型

django rest

django进行序列化和反序列化以及对数据库的增删查改是一个重复的过程,虽然操作的数据不一样,但可以实现代码的重用
django rest特点

  1. serializer.py文件可以根据django的ORM进行自动序列化和反序列化
  2. 提供类视图
  3. 有函数视图,类视图,视图集合可以自动生成URL

为什么使用django rest框架

  1. django rest实现前后端分离,而且可以进行web界面的自测试
  2. 可自动生成具有restful(一种良好的代码规范)风格的url
  3. 视图/视图函数,序列化/反序列化这部分的代码可以重用

中间件

  1. 中间件是什么:中间件就是在requesr和response之间的一道处理程序,在全局范围内改变django的输入和输出。就是说在视图函数执行前和执行后都可进行的一些额外操作。如果操作想在全局范围内对所有的视图和视图函数都起作用,那么在中间件进行操作。
  2. 作用:比如说django默认打开csrf保护,当请求过来时通过csrf中间件判断是否有正确的token值。

csrf原理

csrf要求在发送put,post,delete请求的时候要先发送一个get请求,服务器收到后会发送一个随机字符串给客户端。客户端第二次发送post,put,delete请求的时候携带服务器分配的随机字符串,服务端进行校验。

中间件定义的方法

中间件最多可以定义5个方法:

  1. process_request
  2. proocess_response
  3. process_view
  4. process_exception
  5. process_template_response
    中间件的本质是一个类,类中包含方法,方法的返回值为None或者httpresponse对象,如果是httpresponse对象则直接将对象返回给客户端。

5个方法的执行顺序

  1. 根据setting.py文件中定义中间件的先后顺序执行process_request方法,比如定义了组件1,2,3,4,5,6。如果都没有return则会进入url匹配,如果中间件3有return则直接进入3,2,1的process_response程序。
  2. 然后按照1,2,3,4,5,6的顺序执行process_view方法,中途如果中间件3的peocess_view方法有return则按照6,5,4,3,2,1的顺序执行process_response方法,如果没有函数返回则执行视图类或者视图函数。
  3. 在视图类或者视图函数的执行过程中如果出现问题,则按照1,2,3,4,5,6顺序执行process_exception进行异常匹配。如果没有出错则按照6,5,4,3,2,1的顺序执行httpresponse,如果定义了return语句则会正常执行,将视图函数或者视图类的结果返回给客户端,否则的话报错。
  4. 如果视图或者视图方法中使用render方法向客户端返回数据,则会触发中间件的process_template_response。
    django

常用的内置中间件

  1. 缓存中间件:开启该中间件任何django的页面都将被缓存
  2. 会话中间件:开启会话支持
  3. 通用中间件:会处理一些url,比如在url前加入www,或者在之后加入反斜杠
  4. CSRF保护中间件
  5. 用户授权中间件:会在request到达view之前加入user属性
  6. 消息中间件:展示一些后台信息给前端

MVC和MVT

  1. MVC是指模型,视图,控制器,是常用的一种实现模块解耦,降低耦合性。model用于和数据库交互,view用于向用户展示,controller是核心用于处理请求等
  2. MVT是指模型,视图,模板,是python的一款web开发框架,view是核心用于处理请求,template用于向用户展示

django中的cookie和session原理

cookie:服务器生成两份cookie,一份给浏览器,一份自己保存,之后浏览器再次访问时发送cookie给客户端,客户端与保存的cookie进行比对,从而判断用户之前是否已经登录。

FBV和CBV

FBV是基于函数的视图,CBV是基于类的视图。使用CBV的优点:可以使用面向对象技术比如继承,多态;可以实现代码程序的重用。

django路由系统中name的作用

用于根据name反向解析出url地址,在程序中通过url=reverse(name),进行反向解析。这样即使url.py中url发生了改变,也不用再到程序中更改它的值。

django重定向如何实现,用的什么状态码

使用reverse函数和redict函数进行重定向,redict(reverse(name)),其中reverse函数用于将name和url进行反向解析。
使用301和302状态码,其中301表示网址永久迁移,比如http://www.baidu.com转为https://www.baidu.com,302表示暂时迁移,比如由于用户没有登录将从用户中心跳转到登录页面。