django中cbv源码和restful规范

Posted xuxingping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django中cbv源码和restful规范相关的知识,希望对你有一定的参考价值。

1 django 请求声明周期

-先进入实现了wsgi协议的web服务器----》进入django---》中间件---》路由---》视图---》取模板,取数据,用数据渲染模板---》返回模板的字符串---》在浏览器上看到页面了

 

 

2 开发模式(前后端分离和前后端不分离)

-前后端不分离项目 -前后端分离项目 前端和后端通过json格式数据交互

 

3 cbv 源码分析

-FBV和CBV

-执行流程:

    -路由如果这么配置:url(r‘^test/‘, views.Test.as_view()), 请求通过中间件后进入路由--->根据路由匹配,一旦成功,会执行后面函数(request)---》本质就是执行了as_view内部的view函数----》内部又调用了self.dispatch---->根据请求方式,执行不同的方法(必然get请求,就会执行咱么写的视图类的get方法) -尝试自己封装一个APIView,重写dispatch方法,在执行父类的dispatch之前,写一些逻辑,请求来了,就会执行这些逻辑

 

4 restful规范 -面向资源架构

-10条

  -1 API与用户的通信协议,总是使用HTTPs协议。

  -2 域名有区分 -https://api.example.com -https://example.org/api/

  -3 版本 -可以放在路径中 -可以放在请求头中

  -4 路径,视网络上任何东西都是资源,均使用名词表示(重点) -https://api.example.com/v1/zoos

  -5 通过method 区分是什么操作 -get表示获取 -post表示新增 -delete表示删除 -patch/put 表示修改

  -6 过滤,通过在url上传参的形式传递搜索条件

  -7 状态码 "status_code":100

  -8 错误处理,应返回错误信息 "status_code":100,‘msg‘:‘登录成功‘ "status_code":101,‘msg‘:‘用户名错误‘

  -9 返回结果,针对不同操作,服务器向用户返回的结果 -get获取所有资源/get获取一个资源 -127.0.0.1/api/vi/books 获取所有图书 "status_code":100,‘msg‘:‘获取成功‘,data:[,] -127.0.0.1/api/vi/books/3 获取id为3的图书 "status_code":100,‘msg‘:‘获取成功‘,data:name:xx,.... -新增数据,把新增的数据再返回 -修改了数据,返回完整的资源对象 -删除数据,返回一个空文档

  -10 返回结果中提供链接

 

 

5 drf:APIView 的源码,Requset的源码

  -安装:

    -pip3 install djangorestframework

    -pycharm中安装

  -使用

    -第一步,再写视图,都写cbv

      from rest_framework.views import APIView

      class Books(APIView): pass

    -在setting中配置

      INSTALLED_APPS= [ 。。。。。 ‘rest_framework‘ ]

  -源码分析:

    继承了APIView 之后:

      -1 所有的请求都没有csrf的认证了

      -2 在APIView中as_view本质还是调用了父类的as_view(View的as_view)

      -3 as_view中调用dispatch -----》这个dispatch是APIView的dispatch

    -APIVIew的dispatch方法:

      -1 对原生request对象做了一层包装(面向对象的封装),以后再用的request对象都新的request对象

      -2 在APIView中self.initial(request, *args, **kwargs),里面有频率控制,权限控制和认证相关

      -3 根据请求方法执行咱们写的视图类中的相应方法 --视图类中方法的request对象,已经变成了封装后的request

    -Request类:

      -1 原生的request是self._request

      -2 取以post形式提交的数据,从request.data中取(urlencoded,formdata,json格式)

      -3 query_params 就是原生request的GET的数据

      -4 上传的文件是从FILES中取

      -5 (重点)其他的属性,直接request.属性名(因为重写了__getattr__方法)

 

补充:

  1 wsgi和cgi:通用网关协议 实现了wsgi协议的web服务器:uwsgi 对应到java中就是tomcat

 

 

  2 python中一切皆对象 def test(): print(‘xxxx‘) test.name=‘lqz‘ print(test.name)

 

  3 跨域 什么是跨域,如何解决?

 

 

  4 301和302的区别

    301永久更改资源地址

    302暂时更改资源地址

 

  5 不同程序可以用同一个数据库

 

 

  6 django中表名,自己定义

 

  7 DG软件

  -pycharm开发

  -idea

  -goland

  -androidStadio

以上是关于django中cbv源码和restful规范的主要内容,如果未能解决你的问题,请参考以下文章

Django中CBV和Restful API中的APIView源码分析

001---CBV和restful规范

drf之框架基础

drf 框架

drf框架与postman初始

django restfulwork 源码剖析