【前后端开发架构】
# 前后端混合开发
BBS项目--》混合开发
django写后端,写了模版语言(Django Template Language)
-模版语法--》对模板(index.html) 渲染---》后端完成--》模版语法的执行在后端执行
-我们后端人员,即写了后端,也写了前端
# 前后端分离开发
-后端只写后端---》配接口---》不需要动前端
-前端只写前端--》调用接口
【API接口】
API接口,即通过网络,规定了前后台信息交互规则的url连接,也就是前后台信息交互的媒介
为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方【前后端】之间的合作成本 通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介 http://127.0.0.1/books/ 这就是API接口 --------------------------------------------- api接口:就是前后端交互的媒介 -url地址:https://api.map.baidu.com/place/v2/search -请求方式:get,post,delete,put 等等 -请求参数:json格式的key-value类型数据 -早些年,前后端交互使用xml格式 -后来,随着json格式的出现,成了主流,直到现在 -以后:一定会出现,比json更高效的交互格式,更安全 -响应结果:json格式的数据 ---------------------------------------------- 补充一下:https://api.map.baidu.com 网址就是域名需要通过DNS域名系统解析出ip地址出来 ---------------------------------------------- xml格式接口里面的数据都是被标签包裹着的 json格式接口里面的数据都是json格式的键值对包裹着,键对应的就是xml格式里面的标签名,值对应的就是xml格式里被标签包裹着的数据 # api接口案例 https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295®ion=上海&query=肯德基&output=xml https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295®ion=上海&query=肯德基&output=json
----------------------
ps
协议? API接口用的协议都是:http协议,没有别的协议
【接口测试工具postman】
(body的编码格式)
# 1 get 请求,可以在地址栏中带数据---》能不能在body体中带数据---》能! -注意:可以提交到后端,但是django框架没有放在request.POST中,放在request.body中 # 2 urlencoded 编码格式---》请求体中--》name=%E5%BD%AD%E4%BA%8E%E6%99%8F&age=38 # 3 form-data格式:携带文件和数据 -文件从:request.FILES.get('myfile') -数据:request.POST.get() -request.body 能不能用,取决于文件大小,一般不用打印body(会报错) # 4 json格式 -request.POST 是没有数据的 -request.body中有---》需要咱们自己转
【restful十条规范】
# 以后只要写api接口,尽量遵循这个规范 # 解释 REST全称是Representational State Transfer,中文意思是表述(通常译为表征性状态转移)。 它首次出现在2000年Roy Fielding的博士论文中。 RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中。 我们可以使用任何一个框架都可以实现符合restful规范的API接口 # 规范 10条 1 数据的安全保障 url链接一般都采用https协议进行传输 注:采用https协议,可以提高数据交互过程中的安全性 2 url地址中带接口标识 -https://api.baidu.com -https://www.baidu.com/api/ 3 url中带版本标识 -接口有版本 https://api.baidu.com/v1/login https://api.baidu.com/v2/login 4 数据即是资源,均使用名词(可复数) -以后所有接口路径中,尽量不出现动词 -接口一般都是完成前后台数据的交互,交互的数据我们称之为资源 https://api.baidu.com/v1/users https://api.baidu.com/v1/books https://api.baidu.com/v1/books/3 5 请求方式决定如何操作资源【增,删,改,查:curd】 https://api.baidu.com/books - get请求:获取所有书 https://api.baidu.com/books/1 - get请求:获取主键为1的书 https://api.baidu.com/books - post请求:新增一本书 https://api.baidu.com/books/1 - put请求:整体修改主键为1的书 https://api.baidu.com/books/1 - delete请求:删除主键为1的书 6 url中带搜索条件 https://api.example.com/v1/goods?name=鸡公煲:指定返回搜索的数据 7 响应中带状态码 -http响应状态码 -1xx :请求正在处理 --》客户端看不到 -2xx :正常响应---》经常看到 200:请求成功 201:创建成功 -3xx :重定向---》偶尔看到 301 和 302 -4xx :客户端异常---》403: 404 -5xx: 服务端错误 500 -http状态码有非常多,暂时先不用记,后面再说: https://www.sohu.com/a/278045231_120014184 -自定制状态码 -mysql--》连接连不上--》有个数字:错误码 有个错误描述 -自己定制: 1000 0 1 1001 # 8 响应中带信息描述(错误,正常) -message -msg {code:1000,msg:成功} # 9 针对不同操作符合以下规范 GET /collection:返回资源对象的列表(数组) {code:100,msg:成功,results:[{},{},{}]} GET /collection/resource:返回单个资源对象 {} {code:100,msg:成功,result:{}} POST /collection:返回新生成的资源对象 {} PUT /collection/resource:返回完整的资源对象 {} DELETE /collection/resource:返回一个空文档 {code:100,msg:删除成功} # 10 返回数据中带链接
【序列化与返序列化】
# api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式,序列化可以分两个阶段:【序列化值的是转换数据格式:序列化,返序列化】
# 1.序列化: 把我们识别的数据转换成指定的格式提供给别人
python后端:把python的对象【字典,列表,对象】---》转成json/xml格式字符串过程称之为序列化
例如:我们在django中获取到的数据默认是模型对象(qs/单个对象),但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人。
# 2.反序列化:把别人提供的数据转换/还原成我们需要的格式。
例如:前端js提供过来的json/xml数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中
# js 如何把对象序列化成字符串:【JSON.stringify()】,把字符串饭序列化成对象:【JSON.parse()】
【drf快速体验】
djangorestframework drf-->django上的app---》帮助我们快速实现符合restful规范的接口
1)安装:pip3 install djangorestframework
2)使用:在settings里面注册:installed_apps={rest_framework}
建模型表
3)逻辑层
4)序列化一个类:rest_framework.serializers import ModelSerializer(新建ser.py文件里面写一个类和models对应着)
5)路由分发
6.1)启动项目,用request请求
6.2 用postman测试)
新增
总结:就像学自行车,之前需要一点一点去学,现在给个自行车上去就骑
PS:用多线程创建数据