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

原文地址:https://www.cnblogs.com/xuxingping/p/11122394.html

时间: 2024-10-10 09:49:55

django中cbv源码和restful规范的相关文章

django中CBV源码分析

前言:Django的视图处理方式有两种: FBV(function base views) 是在视图里基于函数形式处理请求. CBV(class base views)是在视图里基于类的形式处理请求. Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承.封装.多态).所以Django在后来加入了Class-Based-View.可以让我们用类写View.这样做的优点主要下面两种: 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承) 可以

Django框架 --CBV源码分析、restful规范、restframework框架

一.CBV源码分析 1.url层的使用CBV from app01 import views url(r'book/',views.Book.as_view()) 2.as_view方法 as_view是一个类方法,实际上是一个闭包函数(内层函数包含对外层作用域的使用) 请求来了以后,调用as_view方法,调用函数中的view方法,view方法是调用了dispatch方法 @classonlymethod def as_view(cls, **initkwargs): def view(req

django-rest framework 接口规范 原生django接口、单查群查 postman工具 CBV源码解析

内容了解 """ 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件.解析组件.响应组件 4.序列化组件(灵魂) 5.三大认证(重中之重):认证.权限(权限六表).频率 6.其他组件:过滤.筛选.排序.分页.路由 """ # 难点:源码分析 一.接口 1.什么是 接口:联系两个物质的媒介,完成信息交互 web程序中:联系前台页面与后台数据库的媒介 web接口组成: url:

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

Django中CBV和Restful API中的APIView源码分析 python的Django框架的视图处理可以用FBV, 也可以采用CBV.首先定义一个CBV视图: from django.views import Viewfrom django.http import JsonResponseclass Book(View):    def get(self, request):        ll = [{'key':value}]        return JsonResponse

Django搭建及源码分析(三)---+uWSGI+nginx

每个框架或者应用都是为了解决某些问题才出现旦生的,没有一个事物是可以解决所有问题的.如果觉得某个框架或者应用使用很不方便,那么很有可能就是你没有将其使用到正确的地方,没有按开发者的设计初衷来使用它,当你将一个框架的优势使用到极致时一定是非常舒服和顺手的一件事.但同时也有可能衍生另一个问题,这个框架只解决了你的问题一,没有解决问题二.三等等,因此,就出现了多个框架/应用相结合的情况.比如Django + uWSGI + nginx. 本人初学python,找了一些实例进行了一些操作,以下纯属目前的

Django Rest Framework源码剖析(三)-----频率控制

一.简介 承接上篇文章Django Rest Framework源码剖析(二)-----权限,当服务的接口被频繁调用,导致资源紧张怎么办呢?当然或许有很多解决办法,比如:负载均衡.提高服务器配置.通过代理限制访问频率等,但是django rest framework自身就提供了访问频率的控制,可以从代码本身做控制. 二.频率控制内部原理概述 django rest framework 中频率控制基本原理基于访问次数和时间,通过计算实现,当然我们也可以自己定义频率控制方法.基本原理如下: 启用频率

Django Rest Framework源码剖析(八)-----视图与路由

一.简介 django rest framework 给我们带来了很多组件,除了认证.权限.序列化...其中一个重要组件就是视图,一般视图是和路由配合使用,这种方式给我们提供了更灵活的使用方法,对于使用者而言不同的视图具有不同的功能,这样我们可以根据需求定制自己视图.以下是官网传送门:http://www.django-rest-framework.org/api-guide/views/ 在之前的文章中,由于参杂了权限.认证等(如果不了解请看博客的以前的文章),但在本章中基本可以不使用,所进使

opencv2.4.9中stitching_detailed源码环境搭建

今天做了一下老师给的第一套题,第一题是判断一个字符串是否在另一个字符串中:做了一下,感觉有好多种写法,java中的类真的好多啊,要掌握好一些基本类的用法: package com.exam.e120; public class java1 { public static void main(String[]args){ String str1,str2; str1="I am Tom, I am from China."; str2="Tom"; int i=str

如何在Eclipse中连接源码

最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要.有的时候代码的可维护.可重用.可扩展确实胜过单纯的算法效率高.所以拾起大牛书籍<大话设计模式>同时参考网上诸大牛的博客,开始我的设计模式之旅.由于平时编程时用C/C++,现在是Java,也练练Java语法. 今天先介绍一下命令模式. 概念: 命令模式(Command):将一个请求封装成一个对象,从而使你可用不同的请求对象对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作.