【前后端开发架构】

# 前后端混合开发
	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&region=上海&query=肯德基&output=xml

https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295&region=上海&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:用多线程创建数据

 

posted on 2024-04-10 16:43  认真的六六  阅读(8)  评论(0编辑  收藏  举报