内容了解

"""
、接口:什么是接口、restful接口规范
、CBV生命周期源码 - 基于restful规范下的CBV接口
、请求组件、解析组件、响应组件
、序列化组件(灵魂)
、三大认证(重中之重):认证、权限(权限六表)、频率
、其他组件:过滤、筛选、排序、分页、路由
"""
# 难点:源码分析

一、接口

1.什么是

接口:联系两个物质的媒介,完成信息交互
web程序中:联系前台页面与后台数据库的媒介
web接口组成:
url:长得像放回数据的url链接
请求参数:前台按照指定的key提供数据给后台
响应数据:后台与数据库交互后将数据反馈给前台

2.restful接口规范

接口规范:就是为了采用不同的后台语言,也能使用同样的接口获取到同样的数据

如何写接口:接口规范是 规范化书写接口的,写接口要写 url、响应数据

注:如果将请求参数也纳入考量范围,那就是在写 接口文档

两大部分:

#1.url

) 用api关键字标识接口url
api.baidu.com | www.baidu.com/api ) 接口数据安全性决定优先选择https协议 ) 如果一个接口有多版本存在,需要在url中标识体现
api.baidu.com/v1/... | api.baidu.com/v2/... ) 接口操作的数据源称之为 资源,在url中一般采用资源复数形式,一个接口可以概括对该资源的多种操作方式,(之前是FBV,一对一,现在CBV,接口针对一个类,类下面有多个方法)
api.baidu.com/books | api.baidu.com/books/(pk) ) 请求方式有多种,用一个url处理如何保证不混乱 - 通过请求方式标识操作资源的方式
/books get 获取所有
/books post 增加一个(多个)
/books/(pk) delete 删除一个
/books/(pk) put 整体更新一个
/books/(pk) patch 局部更新一个 ) 资源往往涉及数据的各种操作方式 - 筛选、排序、限制(查询和西有关的,价格降序,3条)
api.baidu.com/books/?search=西&ordering=-price&limit=

#2.响应数据

) http请求的响应会有响应状态码,接口用来返回操作的资源数据,可以拥有 操作数据结果的 状态码
status (操作资源成功) (操作资源失败) (操作资源成功,但没匹配结果)
注:资源状态码不像http状态码,一般都是后台与前台或是客户约定的 ) 资源的状态码文字提示
status ok '账号有误' '密码有误' '用户锁定' ) 资源本身
results
注:删除资源成功不做任何数据返回(返回空字符串) ) 不能直接返回的资源(子资源、图片、视频等资源),返回该资源的url链接

#3.示例

url:https://api.baidu.com/v1/books?ordering=-price&limit=3
get|post|put|patch|delete
{
'status': 0,
'msg': 'ok',
'results': [
{
'title': '西游记',
'img': 'https://api.baidu.com/media/xyj.png'
}
]
}

二、基于restful规范的原生Django接口

1.创建django项目,app名称为api
2. 主路由 路由分发:url.py
from django.conf.urls import url, include
from django.contrib import admin


urlpatterns = [
url(r'^admin/', admin.site.urls),
# 路由分发
url(r'^api/', include('api.urls'))
]
3. api组件的子路由:api/url.py
from django.conf.urls import url

from . import views
urlpatterns = [
url(r'^books/', views.Book.as_view()), #群查
url(r'^books/(?P<pk>.*)/$', views.Book.as_view()), #单查
]
4.views

5. 模型层:model.py
from django.db import models

class Book(models.Model):
title = models.CharField(max_length=64)
price = models.DecimalField(max_digits=5, decimal_places=2)

class Meta:
db_table = 'old_boy_book'
verbose_name = '书籍'
verbose_name_plural = verbose_name

def __str__(self):
return '《%s》' % self.title
6. 后台层 注册:admin.py
from django.contrib import admin

from . import models

admin.site.register(models.Book)
7. 数据库迁移
>: python manage.py makemigrations  #数据库迁移
>: python manage.py migrrate

>: python manage.py createsuperuser #创建超级用户,开始admin后台管理
8. 原生django单查群查  完整视图层:views.py
    class Book(View):
def get(self, request, *args, **kwargs):
pk = kwagrs.get('pk')
if pk:
# 单查
else:
# 群查
def post(self, request, *args, **kwargs):
# 增
def delete(self, request, *args, **kwargs):
# 删
def put(self, request, *args, **kwargs):
# 整体改
def patch(self, request, *args, **kwargs):
# 局部改

示例

from django.http import JsonResponse

from django.views import View
from . import models


# 六大基础接口:获取一个 获取所有 增加一个 删除一个 整体更新一个 局部更新一个
# 十大接口:群增 群删 整体改群改 局部改群改
class Book(View):
def get(self, request, *args, **kwargs):
pk = kwargs.get('pk')
if not pk: # 群查,子路由中有对应规则,url没有指定pk就是全都要127.0.0.1:8000/api/books/
# 操作数据库
book_obj_list = models.Book.objects.all()
# 序列化过程
book_list = []
for obj in book_obj_list:
dic = {}
dic['title'] = obj.title
dic['price'] = obj.price
book_list.append(dic)
# 响应数据
return JsonResponse({
'status': 0,
'msg': 'ok',
'results': book_list
}, json_dumps_params={'ensure_ascii': False}) //防止转码,不然汉字会转码
else: # 单查,127.0.0.1:8000/api/books/1/ 查看第一个
book_dic = models.Book.objects.filter(pk=pk).values('title', 'price').first()
if book_dic:
return JsonResponse({
'status': 0,
'msg': 'ok',
'results': book_dic
}, json_dumps_params={'ensure_ascii': False})
return JsonResponse({
'status': 2,
'msg': '无结果',
}, json_dumps_params={'ensure_ascii': False})


# postman可以完成不同方式的请求:get | post | put ...
# postman发送数据包有三种方式:form-data | urlencoding | json
# 原生django对urlencoding方式数据兼容最好
def post(self, request, *args, **kwargs):
# 前台通过urlencoding方式提交数据
try:
book_obj = models.Book.objects.create(**request.POST.dict())
if book_obj:
return JsonResponse({
'status': 0,
'msg': 'ok',
'results': {'title': book_obj.title, 'price': book_obj.price}
}, json_dumps_params={'ensure_ascii': False})
except:
return JsonResponse({
'status': 1,
'msg': '参数有误',
}, json_dumps_params={'ensure_ascii': False})

return JsonResponse({
'status': 2,
'msg': '新增失败',
}, json_dumps_params={'ensure_ascii': False})

三、CBV请求生命周期源码回顾 (之前总结过)

1.路由

2. as_view和view

3.dispatch

任务分发其实是调用了我们写的类中的方法,将路由来的参数传递给她们,返回相应数据给前端

4.views.py

四、Postman接口工具

官网下载安装

get请求,携带参数采用Params

post等请求,提交数据包可以采用三种方式:form-date、urlencoding、json

所有请求都可以携带请求头

上方views.py中有后端代码

#百度测试接口  接口文档
method: GET
url: https://api.map.baidu.com/place/v2/search
params:
ak: 6E823f587c95f0148c19993539b99295
region: 上海、郑州、杭州等
query: 肯德基、公园等
output: json

2) 接口规范 原生django接口、单查群查 postman工具 CBV源码解析的更多相关文章

  1. Django生命周期 URL ----> CBV 源码解析-------------- 及rest_framework APIView 源码流程解析

    一.一个请求来到Django 的生命周期   FBV 不讨论 CBV: 请求被代理转发到uwsgi: 开始Django的流程: 首先经过中间件process_request (session等) 然后 ...

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

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

  3. Django框架 之 admin管理工具(源码解析)

    浏览目录 单例模式 admin执行流程 admin源码解析 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在 ...

  4. Django的rest_framework的视图之基于ModelViewSet视图源码解析

    前言 今天一直在整理Django的rest_framework的序列化组件,前面一共写了2篇博客,前面的博客给的方案都是一个中间的状态的博客,其中有很多的冗余的代码,如果有朋友不清楚,可以先看下我前面 ...

  5. Django中CBV源码解析

    使用 关于FBV和CBV的使用在之前有提到,点击穿越. 准备 首先在视图中创建一个类并继承 django.views.View 类,在类中可定义各种请求方式对应执行的函数(函数名为请求方式名称小写). ...

  6. 关于原生js中函数的三种角色和jQuery源码解析

    原生js中的函数有三种角色: 分两大种: 1.函数(最主要的角色)2.普通对象(辅助角色):函数也可以像对象一样设置属于本身的私有属性和方法,这些东西和实例或者私有变量没有关系两种角色直接没有必然的关 ...

  7. Django之CBV源码解析

    l链接跳转:https://www.cnblogs.com/hnlmy/p/9662798.html 以及https://www.cnblogs.com/hnlmy/p/10603999.html

  8. DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render

    DRF框架    全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...

  9. restful接口规范 | 基于restful的原生django接口

    restful接口规范 接口 接口:联系两个物质的媒介,完成信息交互 web程序中:联系前台页面与后台数据库的媒介 web接口组成: - url:长得像返回数据的url链接 - 请求参数:前台按照指定 ...

随机推荐

  1. DIV+CSS 样式简单布局Tab 切换

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

  2. 项目中你不得不知的11个Java第三方类库

    项目中你不得不知的11个Java第三方类库 博客分类: Java综合 JavaGoogle框架单元测试Hibernate Java第三方library ecosystem是一个很广阔的范畴.不久前有人 ...

  3. commonJS、AMD和CMD之间的区别

    JS中的模块规范(CommonJS,AMD,CMD),如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已. 现在就看看吧, ...

  4. linux下的信号量PV操作进阶之路

    一.同步和互斥机制 信号量 互斥锁 同步:指多个任务按照约定的先后次序相互配合来完成一件事情. 比如读线程等待写线程写完之后再去读. 二.信号量-P/V操作 P(s)含义: if(信号量>0) ...

  5. Daily Scrum 12/17/2015

    Process: Zhaoyang:完成了相册图片的异步加载. Yandong&Dong:   对Azure的体系架构进行学习和相应的编程. Fuchen:   对Oxford计划中的NLP接 ...

  6. stand up meeting 12/9/2015

    part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云  --------------    --  -----------  -- PDF Reader 朱玉影 SDK终于差不 ...

  7. C - Roads in the North DFS+树的直径

    Building and maintaining roads among communities in the far North is an expensive business. With thi ...

  8. 【论文研读】强化学习入门之DQN

    最近在学习斯坦福2017年秋季学期的<强化学习>课程,感兴趣的同学可以follow一下,Sergey大神的,有英文字幕,语速有点快,适合有一些基础的入门生. 今天主要总结上午看的有关DQN ...

  9. [YII2] COOKIE的操作使用

    PHPcookie的设置 setcookie('username',$data['username'],time()+3600*24*7); YII2cookie的设置 $cookies = Yii: ...

  10. Spring5:IOC注解

    使用注解须知: 1:导入约束:导入context的命名空间 2:配置注解的支持:<context:annotation-config/> <?xml version="1. ...