django两种开发模式:

一、前后端不分离项目

二、前后端分离项目

什么是restful规范?

在前后端不分离的项目中,网页所需要的数据可以直接通过模板渲染的方式传递到前端页面,并且可以很好的支持django自带的各种验证工具,比如csrfmiddleware

但在前后端分离的项目中,前后端的数据通信普遍通过json字符串的形式通信,那么我们就需要有个标准去定义前后端沟通方式或者说格式

restful就是来干这件事情的,它是一种面向资源的架构,规定API如何编写,通过它我们可以让api更加简洁可维护,是对于我们写程序的一些规范

再次强调,restful规范只是一种规范,并不是强制性的,各公司可以结合自身需要去做适配和调整

它对于接口规范的影响深刻,绝大多数公司开发都沿用了这项规范,所以这往往也是面试官喜欢问的问题之一

restful规范10条:

  1、API与用户的通信协议,总是使用HTTPS协议--数据更安全

  2、域名有区分:

        -https://api.example.com
   -https://example.org/api/

  3、版本:

    可以放在路径中

      -https://api.example.com/v1/zoos    这里的v1即是表示接口版本

    也可以放在请求头中

  4、通过method区分是什么操作

    -get 表示获取资源

    -post 表示新增

    -put/patch表示更新

    -delete表示删除

  5、路径、视网络上的所有东西都是资源,用名词表示

      -https://api.example.com/v1/zoos    这里的zoo即是名词,不再出现动词表示操作了

    例如获取id为1的书籍

      https://api.example.com/v1/books/1   # 这是用get请求表示请求资源,如果是delete请求即表示将这本书删除

  6、过滤,在路径上传参的形式传递搜索条件

      https://www.baidu.com/s?wd=python&rsv_spt=1

  7、返回状态码:

  {"status_code":100}

  8、正确错误与否都应返回相应信息

  {"status_code":100,"message":"登陆成功!"}
  {"status_code":101,"message":"登陆失败!密码错误!"}

  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、返回结果中提供链接

什么是rest_framework?

它是基于Django的一种服务框架,可以帮助我们快速开发符合RESTful规范的接口框架。

功能:

1.路由

2.视图

3.版本

4.认证

5.权限

6.频率

7.解析器

8.序列化

9.分页

10.渲染器

drf  (django rest_framework):

APIView 的源码,Requset的源码
  -安装:
    -pip3 install djangorestframework
    -pycharm中安装
    -使用
  -第一步,再写视图,都写cbv

    from rest_framework.views import APIView
    class Books(APIView):
    pass

  -第二步,在setting中配置,rest_framework实质上是一个app,需要注册才可以使用

  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__方法)

restful规范与rest_framework的更多相关文章

  1. DjangoRestFramework 学习之restful规范 APIview 解析器组件 Postman等

    DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组件 ...

  2. 一、restful规范 二、CBV(View)源代码执行流程 三、drf框架安装和简单使用

    一.restful规范 ''' 它是一个规范,面向资源架构 十条规范 1.API与用户的通讯协议,总是使用HTTPs协议,确保了网络传输的安全性 2.域名 --https://api.example. ...

  3. django rest framework restful 规范

    内容回顾: . django请求生命周期 -> 执行遵循wsgi协议的模块(socket服务端) -> 中间件(路由匹配) -> 视图函数(业务处理:ORM.模板渲染) -> ...

  4. day89 DjangoRsetFramework学习---restful规范,解析器组件,Postman等

     DjangoRsetFramework学习---restful规范,解析器组件,Postman等           本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析 ...

  5. 001---CBV和restful规范

    CBV 和 restful规范 知识点准备: django的view FBV:基于函数的视图 CBV:基于类的视图 urls.py from django.urls import path from ...

  6. django中的restful规范

    基于django的原生restful规范 主路由:url.py from django.conf.urls import url, include from django.contrib import ...

  7. 18.DjangoRestFramework学习一之restful规范、APIview、解析器组件、Postman等

    一 预备知识 预备知识:django的CBV和FBV CBV(class based view):多用,简单回顾一下 FBV(function based view): CBV模式的简单操作:来个登陆 ...

  8. Django框架(十七)-- CBV源码分析、restful规范、restframework框架

    一.CBV源码分析 1.url层的使用CBV from app01 import views url(r'book/',views.Book.as_view) 2.as_view方法 as_view是 ...

  9. Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)

    一.Django请求生命周期: 前端发出请求到后端,通过Django处理.响应返回给前端相关结果的过程 先进入实现了wsgi协议的web服务器--->进入django中间件--->路由f分 ...

随机推荐

  1. Jest自动化测试

    最近一直很苦恼,测试这一块的内容,一直想提升测试效率,从慕课网了解到了自动化测试jest ,准备试下下,记录一下学习笔记,方便别人使用 1 什么是 Jest? Jest是 Facebook 的一套开源 ...

  2. 023_统计当前 Linux 系统中可以登录计算机的账户有多少个

    #!/bin/bash #方法 1: grep "bash$" /etc/passwd | wc -l #方法 2: #-F END都要大写! awk -F: '/bash$/{x ...

  3. SSH 远程上传本地文件至服务器

    使用SSH命令行传输文件到远程服务器   以前一直在windows下用SSH Secure Shell连接远程服务器,它自带了一个可视化的文件传输工具,跟ftp差不多 但是它也存在一个缺陷,不支持编码 ...

  4. CentOS 7.5 ——如何开放80、8080、3306等端口

    CentOS 7.5 ——如何开放80.8080.3306等端口 ——说明:CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙——1.关闭firewall: s ...

  5. 求ascii 然后做运算

    介绍 ABC 返回每个字符的ascii A->65 B->66 C->77 组成656667 把所有的7替换成1 然后变成 656667 和 656661 每个数值做加法 然后做减法 ...

  6. Hadoop环境搭建|第四篇:hive环境搭建

    一.环境搭建 注意:hive版本不能太高,否则会出现兼容性问题 1.1.上传hive安装包 创建文件夹用于存放hive文件命令:mkdir hive 1.2.解压hive安装包 命令:tar -zxv ...

  7. DQL:查询表中数据

    1. 基础查询 (1) 查询整表 SELECT * FROM 表名; -- 不推荐使用"*",不方便阅读 (2) 选择性查询 SELECT 列名,列名,列名 FROM 表名; (3 ...

  8. Linux设备驱动程序 之 中断

    中断 中断使得硬件可以发出通知给处理器,本质上是一种特殊的电信号,由硬件设备发向处理器,处理器接收到中断后,会马上向操作系统反应此信号的到来,然后就由操作系统负责处理这些新来的数据:硬件设备生成中断并 ...

  9. 牛顿法与拟牛顿法(五) L-BFGS 算法

    转自 https://blog.csdn.net/itplus/article/details/21897715

  10. Python3中_和__的用途和区别

    访问可见性问题 对于上面的代码,有C++.Java.C#等编程经验的程序员可能会问,我们给Student对象绑定的name和age属性到底具有怎样的访问权限(也称为可见性).因为在很多面向对象编程语言 ...