前后端混合开发模式是一种开发方式,将前端和后端的开发工作结合在一起,以加快项目的开发速度和
提高协作效率。这种模式通常用于快速原型开发、小型项目或敏捷开发中。
在前后端混合开发模式中,前端和后端开发人员紧密合作,共同制定项目需求、设计界面和编写代码。
具体来说,这种模式有以下特点:
1. 交叉开发:前端和后端开发人员在同一时间内并行进行开发,
	而不是先完成一个部分再进行另一个部分的开发。
2. 紧密协作:前端和后端开发人员之间需要密切合作,共同解决问题,制定接口规范,
	并确保前后端之间的数据交互和功能协调一致。
3. 接口规范:在前后端混合开发中,明确的接口规范尤为重要。
	前端和后端需要约定好数据传输的格式、接口命名和参数等。
4. 快速迭代:由于前后端同时进行开发,可以更快地进行迭代和调整,及时响应变化的需求。
5. 敏捷开发:这种开发模式适用于敏捷开发流程,可以在项目开发周期内频繁地进行需求变更和更新。
然而,前后端混合开发模式也需要注意一些问题,例如接口不稳定可能导致前后端频繁修改,
需要严格的接口文档和版本管理。此外,项目的复杂性和团队的规模也会影响这种开发模式的适用性。
 
前后端分离开发模式是一种软件开发方式,其中前端和后端的开发工作分开进行,彼此解耦,
通过接口进行数据交互。这种模式旨在提高开发效率、降低耦合度,并允许不同团队专注于各自领域的开发。
在前后端分离开发模式中,前端和后端开发人员可以使用不同的编程语言、框架和技术来进行开发。
前端负责构建用户界面、交互和用户体验,后端负责处理业务逻辑、数据库操作和提供数据接口。
主要特点包括:
1.  ** 松耦合** :前后端之间通过接口进行数据交互,实现了松耦合的架构,使得前后端团队可以独立开发和更新。
2.  ** 独立开发** :前端和后端可以同时进行开发,不会相互阻塞,从而加快项目的开发进度。
3.  ** 技术多样性** :前端和后端可以选择最适合自己的技术栈,使得团队可以根据需求灵活选择合适的工具。
4.  ** 提高效率** :前端和后端开发人员专注于各自领域的开发,提高了效率和专注度。
5.  ** 维护方便** :由于前后端分离,当需求变更或修复问题时,只需修改相应的模块,不会影响到整个系统。
6.  ** 适合团队合作** :不同团队可以并行开发,有助于团队协作和项目管理。
然而,前后端分离也需要注意接口设计的合理性、数据传输的安全性以及接口文档的编写和维护等问题。同时,这种模式对项目的规划和架构设计有一定的要求,以确保前后端之间的协同顺畅。
 
为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,
而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本
- api接口:通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介
	- https: // www. baidu. com/ books/ - - - > json 格式数据- - - 》接口
    - https: // www. cnblogs. com/ liuqingzheng/ articles/ 17400599 . html- - - 》返回界面
        
- url和接口的区别:Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点
	- 1 . url:长得像返回数据的url链接
    	https: // api. map . baidu. com/ place/ v2/ search
    - 2. 请求方式:get、post、put、patch、delete
		采用get方式请求上方接口
	- 3. 请求参数:json或xml格式的key- value类型数据
        ak:6E823f587c95f0148c19993539b99295
        region:上海
        query:肯德基
        output:json
    - 4. 响应结果:json或xml格式的数据
    	- https: // api. map . baidu. com/ place/ v2/ search?ak= 6E823f587c95f0148c19993539b99295& region= % E4% B8% 8A% E6% B5% B7& query= % E8% 82 % AF% E5% BE% B7% E5% 9F% BA& output= json
- 典型的api接口长这样
	- url地址
    - 有请求方式
    - 携带参数
    - 返回格式是json,xml
- 前端不同编码格式:
	- urlencoded:  body体中 :username= lqz& password= 123   django的request. POST取出值
    - json: body体中 :{ "username" : "lqz" , "password" : "123" }   django的request. POST取不出值
    - form- data:body中格式固定:数据部分和文件部分- - 》request. POST能取出数据,取不出文件,文件都是从
    	'- - - - - - - - - - - - - - - - - - - - - - - - - - - - 789048583058585187025897 \r\nContent- Disposition:  form- data;  name= "username" \r\n\r\nlqz\r\n文件二进制
- django中的文件对象和原来的文件对象
	- django:from  django. core. files. uploadedfile import  InMemoryUploadedFile
    - 原生文件:_io. BufferedWriter
    - django中文件类没有继承原生文件类,但是有原生文件类所有方法
- 装饰器模版
def  warpper_request ( func) : 
    def  inner (  * args,  ** kwargs) : 
        
        res =  func( * args,  ** kwargs) 
        
        return  res
    return  inner
1  前后端分离要写接口- - - 》api接口- - - 》接口测试工具postman
2  restful规范是什么,如何来的?
	- 一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中 的规范
    - Roy Fielding的博士论文提出的
3  以后写接口,大致都要遵循一个规范,restful规范- - - 》10 条- - 》
	- 1  数据的安全保障- 》url链接一般都采用https协议进行传输- - 》它比http安全
	- 2  接口特征表现- - 》url中带api标识
    	- https: // api. baidu. com/ books/ 
        - https: // www. baidu. com/ api/ books/ 
            
    - 3  多数据版本共存- - 》url中带版本信息
    	https: // api. baidu. com/ v1/ books
		https: // www. baidu. com/ api/ v2/ books
            
    - 4  数据即是资源,均使用名词(可复数)- - > 前后台交互,交互的数据称之为资源
    	- 数据即资源,前后端交互的数据称之为资源,url尽量使用名字
    	- https: // 127.0 .0 .1 / api/ v1/ books/   - - > 表示对图书操作:增加,删除,查询,修改,都用这一个地址
        - https: // 127.0 .0 .1 / api/ v1/ get_all_books/  
        - https: // 127.0 .0 .1 / api/ v1/ delete_books/ 
   - 5  资源操作由请求方式决定
		- get 请求获取数据(获取所有,获取单条)
    	- post 新增数据
        - put 修改数据
        - delete 删除数据
        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   请求地址中带过滤条件- - - 》只针对于搜索所有接口
	https: // api. example. com/ v1/ zoos?limit= 10 :指定返回记录的数量
	https: // api. example. com/ v1/ zoos?offset= 10 :指定返回记录的开始位置
	https: // api. example. com/ v1/ zoos?page= 2 & per_page= 100 :指定第几页,以及每页的记录数
	https: // api. example. com/ v1/ zoos?sortby= name& order= asc:指定返回结果按照哪个属性排序,以及排序顺序
	https: // api. example. com/ v1/ zoos?animal_type_id= 1 :指定筛选条件
    
  - 7  响应状态码( 两层) 
	- http响应状态码: 1xx,2xx,3xx,4xx,5xx:https: // www. sohu. com/ a/ 278045231_120014184 
    	- 404 和403  和 405 
        - 301 和302 
        - 1xx表示请求正在处理- - - 》前端一般看不到
        - 2xx 表示请求处理成功- - 》经常看到
        	- 201 和200 有什么区别
        - 3xx:重定向
        - 4xx: 客户端错误
        - 5xx:服务端出错
        
    - 成功都返回200 ,而在响应体中带 状态码- - - > code不同公司就不一样
    	{ 
            "code" :  101 , 
            "msg" :  "用户名或密码错误" 
        } 
        
    - 补充一:mysql 错误操作都会有个 数字( 10060 )   文字解释
    - 补充二:
    - https: // open . weibo. com/ wiki/ Error_code
    
 - 8  响应中带错误信息
	{ 
            "code" :  101 , 
            "msg" :  "用户名或密码错误" 
        } 
    
 - 9  不同操作,返回格式符合如下标准
	GET / collection:返回资源对象的列表(数组)
    	
    GET / collection/ resource:返回单个资源对象 
    	
    POST / collection:返回新生成的资源对象
    	
    PUT / collection/ resource:返回完整的资源对象
    	
    DELETE / collection/ resource:返回一个空文档
    	
        
    - - - 》大家都这么做
    { 
        code: 100 
        msg: 查询成功
        restult: [ { name: 西游记, price: 19 } , { name: 三国, price: 19 } ] 
    } 
    
    
 - 10  响应中带链接
	Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,
	连向其他API方法,使得用户不查文档,也知道下一步应该做什么
{ 
  	"status" :  0 , 
  	"msg" :  "ok" , 
  	"results" : [ 
        { 
            "name" : "肯德基(罗餐厅)" , 
            "img" :  "https://image.baidu.com/kfc/001.png" 
        } 
      	. . . 
		] 
} 
序列化: 数据转换格式
序列化分两个阶段:
	- 序列化:把我们识别的数据转换成指定的格式提供给别人
    - 反序列化:把别人提供的数据转换/ 还原成我们需要的格式
序列化: 把我们识别的数据转换成指定的格式提供给别人。
例如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,
所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人。
反序列化:把别人提供的数据转换/ 还原成我们需要的格式。
例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,
这样我们才能把数据保存到数据库中
基于django编写符合restful规范的接口了
	假设以 Book 表为例,写它的5 个接口
		- 1  查询所有
	    - 2  新增一条
	    - 3  修改一条
	    - 4  删除一条
	    - 5  查询一条
    
    
以下是使用原生django编写:
注意:djangorestframework:  drf,  django的一个第三app- - - 》方便我们快速实现符合restful规范的接口
使用步骤:
	1  安装模块
    	1  django 是2 版本,用不了drf最新(适当降版本),他会卸载django- - - 》装最新4 . x
        2  djagno 3.1 .12  可以使用drf最新	
        	- django:3.1 .12 
            - drf: 3.14 .0 
                
    2  在app中注册
        INSTALLED_APPS =  [ 
            'rest_framework' ,   
        ] 
    	
    3  写路由
    from  rest_framework. routers import  DefaultRouter
    router =  DefaultRouter( ) 
    router. register( 'books' ,  BookView,  'books' ) 
    
    urlpatterns +=  router. urls
    4  写视图类
    from  rest_framework. viewsets import  ModelViewSet
    from  . serializer import  BookSerializer
    class  BookView ( ModelViewSet) : 
        queryset =  Book. objects. all ( ) 
        serializer_class =  BookSerializer
    5  写序列化类
    class  BookSerializer ( serializers. ModelSerializer) : 
    class  Meta : 
        model =  Book
        fields =  "__all__"