准备:

  下载 pip install djangorestframework

一 APIView源码解析

1 预备知识

CBV(class based view)
FBV(function based view)

2 CBV源码

    class LoginView(View):

        def get(self,request):
return render(request,"login.html") url(r'^index/', views.index), #url(r'^login/', views.LoginView.as_view()),
#url(r'^login/', View.view), 一旦用户get访问login:
#login-----》view(request):
self = cls(**initkwargs)
return self.dispatch(request, *args, **kwargs):
# 分发
handler = getattr(self, request.method.lower()) return handler(request, *args, **kwargs):
def get(self,request):
return render(request,"login.html")

3 restful协议

  1 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性

  2 面向资源架构(ROA:Resource Oriented Architecture)

  3

    不符合规范:
      127.0.0.1:8000/books
      127.0.0.1:8000/books/add/
      127.0.0.1:8000/books/change/1
      127.0.0.1:8000/books/delete/1

    http协议请求方式:GET POST,DELETE,PUT,PATCH,OPTION.HEAD

    GET:查看数据
    POST:提交数据添加数据库

      GET
    books-------->查看数据--------------------> 返回所有数据列表 :[{},{},{}]
      POST
    books-------->添加数据--------------------->返回添加数据 :{}
      PUT
    books/1------->更新pk=1的数据--------------->返回更新后的数据: {}
      Delete
    books/1-------> 删除pk=1的数据-------------->返回空
      GET
    books/1------->查看单条数据 --------------->返回查看的单条数据 {}

4 Django RestFramework (DRF)--------------app

  (1) APIView (*****)
  (2) 序列化组件(*****)
  (3) 视图类(mixin)(*****)
  (4) 认证组件
  (5) 权限组件
  (6) 频率组件
  (7) 分页组件
  (8) 解析器组件(*****)
  (9) 响应器组件
  (10) url控制器

class CourseView(APIView):
  def get(self,request):
    course_list=Course.objects.all()
    ret=[]
    for course in course_list:
      ret.append({
      "title":course.title,
      "desc":course.desc,
      })
    return HttpResponse(json.dumps(ret,ensure_ascii=False))

  ----APIView:

    # url(r'^courses/', views.CourseView.as_view()),
    # url(r'^courses/', APIView.as_view()),
    # url(r'^courses/', APIView.as_view()),
    # url(r'^courses/', View.view),
  一旦用户访问:

    courses--------> view(reqeust):
        self = cls(**initkwargs)
        return self.dispatch(request, *args, **kwargs) # APIView.dispatch()
          def dispatch(request, *args, **kwargs):

            # 1 重装一个新的request对象

            # 2 认证组件,权限组件,频率组件

            handler = getattr(self, request.method.lower())
            response = handler(request, *args, **kwargs)
            return response

csrf_exempt(view)

  如果有csrf_token则,正常返回数据

  没有则返回空数据

二 解析器组件

http协议的数据发送:

问题:如何发送json数据服务器

基于http协议
BS架构: Browser ------------------ Server

b'''
POST /login/ HTTP/1.1
...
...

contentType:application/x-www-form-urlencoded
user=yuan&pwd=123&a=1

contentType:application/json
{"user":"yuan","pwd"}

'''

JS Python

JSON.Stringfy(data) ============ json.dumps(data)
JSON.parser(data) ============ json.loads(data)

Django默认解析器:
  if contentType:application/x-www-form-urlencoded:
    user=yuan&pwd=123&a=1 -----》request.POST={"user":"yuan","pwd"}
  else:
    request.POST={}

解析器组件功能:

  预备知识

    1 request.body:可以得到请求体中的原生数据

    2 django自带的解析只支持,不支持json等其他类型

      contentType:application/x-www-form-urlencoded

      contentType:multipart/form-data

    3 ajax中定义发送数据的类:contentType

    4 js的json序列化:JSON.stringify({name:'alex',pwd:'122'})

  解析器组件:

    可以解析json等各种类型的数据

    

      

Django RestFramework (DRF)的更多相关文章

  1. Django REST framework(DRF)

    Django REST framework(DRF) FBV与CBV CBV源码分析 Restful接口规范 DRF简单配置使用和源码解析 DRF序列化器 DRF10大接口 DRF视图集 三大组件 j ...

  2. Django学习(2)数据宝库

    数据库是一所大宝库,藏着各种宝贝.一个没有数据库的网站,功能有限.在Django中,支持的数据库有以下四种: SQLite3 MySQL PostgreSQL Oracle 其中SQLite3为Dja ...

  3. Django学习(4)表单,让数据库更美好

    表单,在HTML中的标签为<form></form>,在网页中主要负责数据采集功能.我们在浏览网站时,常常会碰到注册账号.账号登录等,这就是表单的典型应用. 在Django学习 ...

  4. Django学习(3)模板定制

    在Django学习(一)一首情诗中,views.py中HTML被直接硬编码在代码之中,虽然这样便于解释视图是如何工作的,但直接将HTML硬编码到视图却不算一个好主意.因为: 对页面设计进行的任何改变都 ...

  5. Django分页(一)

    Django分页(一) 手动实现简单分页 HTML <!DOCTYPE html> <html lang="en"> <head> <me ...

  6. Python Django 学习 (二) 【Django 模型】

    注: 由于自己排版确实很难看,本文开始使用markdown编辑,希望有所改善 官方定义 A model is the single, definitive source of information ...

  7. pycharm平台下的Django教程(转)

    本文面向:有python基础,刚接触web框架的初学者. 环境:windows7   python3.5.1  pycharm专业版  Django 1.10版 pip3 一.Django简介 百度百 ...

  8. Django 模型(数据库)

    Django 模型(数据库) )         email = models.EmailField()         memo = models.TextField()   def __unico ...

  9. Django视图(一)

    Django视图(一) 一. 概述 作用:视图接受web请求,并相应请求 本质:视图是自定义的一个python中的函数 响应内容:正常视图,重定向视图,错误视图(404,500,400) 响应过程: ...

随机推荐

  1. Nginx学习笔记(二):Nginx 连接处理 / 负载均衡

    Connection 在 Nginx 中,connection 就是对 TCP 连接的封装,其中包括连接的 socket,读写事件   Nginx 处理连接流程: 解析配置文件,得到需要监听的端口和I ...

  2. 游记-pkupc&cts2019

    Day0 和boshi.Rayment组的队,昨天听学长说这次比赛可以加学分,他们信科的大部分人都会参加,估摸有两百多支队伍--然而奖品只有不到一百份 我要奖品呐! 上午十一点半到的北京,拉着行李提着 ...

  3. (五)Spring Boot之@RestController注解和ConfigurationProperties配置多个属性

    一.@RestController和@Controller的区别 @RestController注解相当于@ResponseBody + @Controller合在一起的作用. 如果只是使用@Rest ...

  4. sql 视图的好处

    第一点:使用视图,可以定制用户数据,聚焦特定的数据. 解释: 在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话,采购人员,可以需要一些与其有关的数据,而与他无关的数据,对他没有任何意义, ...

  5. 安装mysql时出现 mysql Install/Remove of the Service Denied! 错误的解决办法

    用cmd在mysql的bin目录下面执行: mysqld --install 命令,出现错误: mysql Install/Remove of the Service Denied! 解决方法:以管理 ...

  6. [书籍翻译] 《JavaScript并发编程》 第二章 JavaScript运行模型

    本文是我翻译<JavaScript Concurrency>书籍的第二章 JavaScript运行模型,该书主要以Promises.Generator.Web workers等技术来讲解J ...

  7. Java中常见时间类的使用

    模拟场景针对于常用的操作API,比如流操作(字符流.字节流),时间操作等,仅仅了解概念性的定义终究是无法了解该类的用途和使用方式:这种情况在使用的时候便一脸茫然,脑海中映射不到对应的知识点.本篇博客将 ...

  8. vue-cli3 使用雪碧图

    //vue.config.js const path = require("path"); const SpritesmithPlugin = require("webp ...

  9. TypeScript入门七:TypeScript的枚举

    关于枚举 数字枚举 字符串枚举 异构枚举 计算的和常量成员 运行时的枚举与反向映射 常量枚举与外部枚举 一.关于枚举 枚举:一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计 ...

  10. Java 之 JDK9 对集合添加的优化

    通常,在代码中创建一个集合(例如,List 或 Set ),并直接用一些元素填充它. 实例化集合,几个 add方法调用,使得代码重复. Java 9,添加了几种集合工厂方法,更方便创建少量元素的集合. ...