后端开发简介

后端开发介绍

1 . 前后端开发模式

xadmin
	前端的后台管理模板,layui+jquery
admin-lte
	前端的后台管理模板,bootstrap+jquery
	
# 前后端混合开发
	-前端,后端都是一个人来完成
	-自己写前端,调试
	-自己写后端,调试
# 前后端分离
	- 后端人员只负责写接口(API接口),可以使用postman等接口测试工具测试
		- postman
			下载网址:https://www.postman.com/downloads/?utm_source=postman-home
			是一种常用的接口测试工具,相对于其它的接口测试工具,它是比较简单的一个接口测试工具
			适用于开发人员、测试人员
			开发:开发每个功能的接口后,都需要自己调试
			测试:通过设置不同的参数去测试接口实现的是否正确
	- 前端人员只负责写前端,写的过程中使用mock数据
		- mock
			mock的意思是模拟,就是在测试过程中,对于一些不容易构造和获取的对象,
			用一个虚拟的对象来创建以便测试。
			
			其中分为俩类
				- 前端对接口的mock
				- 后端单元测试中涉及的mock
			
			mock测试是可控的方式模拟真实的对象行为,通常创造模拟对象来测试对象本身该具备的行为
			通过代码制造假的输出“结果”
			通过代码去模拟假的接口返回数据
	- 最后:前后端联调项目

1.1 前后端不分离视图

前后端不分离

1.2 前后端分离视图

前后端分离

2. API接口

# 通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介
	-- 前台系统:主要是指用于用户和客户操作的界面或者是手机app。
	此类操作软件直接对外服务,是给用户看的,和一些业务受理等功能。
	
	-- 后台系统:是内部管理、业务内部处理、以及内部资源配置等系统,这些都是属于企业内容的软件系统,仅对内使用,不对外开放。


# API接口的样子
	- url:长得像返回数据的url链接
		https://api.map.baidu.com/place/v2/search
	- 请求方式:get、post、put、patch、delete
		采用get方式请求上方接口
	- 请求参数:json或xml格式的key,value类型数据
		ak:6E823f587c95f0148c19993539b99295
        region:上海
        query:肯德基
        output:json
        响应结果:json或xml格式的数据
	-响应结果:json或xml格式的数据
		

3. 接口测试工具postman

# API接口写好,后端人员要测试,不可能在浏览器里测试

# 使用postman软件,来做接口测试
	- 其本质就是:模拟发送Http请求
# 接口测试软件有很多,postwoman

# 官网下载:https://www.postman.com/downloads/
    # 双击点击安装即可,会自己安装好并创建到桌面上
    

image-20220923153039923

4. restful规范

REST 全称是 Representational State Transfer,中文意思是表述:表征性状态转移,它首次出现在2000年Roy Fielding的博士论文中。

RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式
restful规范有10点,(规范,公司都有自己的风格规范)

  • 1. 数据的安全保障
    	url链接一般都是采用https协议进行传输,
    	也就是说为了保证数据的安全性使用https协议传输
    
  • 2. 接口中带api关键词
    	https://api.map.baidu.com/place/v2/search
    	https://baidu.com/api
    
  • 3. 多数据版本共存
    	一个接口可能有多个版本,url链接中应该要有标识版本的标识
    	比如: 登录接口,最初只需要用户名和密码
        https://baidu.com/api/login/v1	(v1标识着老版本)
        
        但后期考虑到不安全又加,又写了一个登录接口,需要用用户名,密码,验证码	
        这个时候考虑到老用户也要使用不可能把之前的接口关掉,就在后加上标识区分。
        https://baidu.com/api/login/v2	(v2标识着新版本)
    
  • 4. 数据即资源,均使用名词(可用复数)》》》:接口尽量使用名词
    	都是用名词,没法区分是增加,删除,修改,查询
    
  • 5. 资源操作由请求方式决定
        --获取数据:get请求
        --删除数据:delete请求
        --新增数据:post请求
        --修改数据:put或patch请求
    
  • 6. url地址中带过滤参数
    	通过url后携带参数挨传递过滤条件
    	如:
        	获取动物园所有动物
        	127.0.0.1/api/v1/animals --->:get请求
            获取动物园所有的爬行动物
            127.0.0.1/api/v1/animals?type=爬行类 --->:get请求
    
  • 7.响应带状态码
    	http状态码:http://tools.jb51.net/table/http_status_code
    	--1xx:表示请求正在处理,一般看不到
            100(Continue),继续。客户端应继续请求
            101(Switching Protocols),切换协议。服务器根据客户端的请求切换协议,只能切换到更高的协议。
    	--2xx:表示请求处理成功
    		200(OK),请求成功,一般用于GET与POST请求
    		201(Created),已创建,成功请求并创建了新的资源
    		203(Non-Authoritative information),非授权信息,请求成功,但返回的meta信息不在原始的服务器,而是一个副本
    		204(No Content),无内容。服务器成功处理,但未返回内容,在未更新网页的情况下,可确保历览器继续显示当前文档
    		205206、...
    	--3xx:表示重定向到其它地址
    		300(Multiple Choices),多种选择,请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端
    		301(mOVED Permanently),永久移动。请求的资源已被永久的移动到了新的URL,返回的信息会包括新的URL,后浏览器会自动定向到新的URL
            	今后任何新的请求都应使用新的URL代替
    		302(Found),临时移动。与301类是,但资源只是临时被移动,客户端应继续使用原有的URL
    		303(see Other),查看其它地址,与301类是,使用GET与POST请求查看
    		304305、...
    	--4xx:客服端错误
    		400(Bad Request),客户端请求的语法错误,服务端无法识别。
    		401(Unauthorized),请求要求用户的身份证
    		402(Payment Required),保留。将来使用
    		403(Forbidden),客户端无权访问。服务器理解请求客户端的请求,但是拒绝执行此请求。
    		404(Not Found),请求资源不存在。服务器无法根据客户端的请求找到资源。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
            405406、...
    	--5xx:服务端错误
    		500(Internal Server Error),服务器内部出错。无法完成请求
    		501(Not Implemented),服务器不支持请求的功能,无法完成请求
    		502(Bad Gateway),充当网关或代理的服务器,从远端服务器接收到了一个无效的请求
    		503(Service Unavailable),由于超载或系统维护,服务器暂时无法处理客户端的请求,延时的长度可包含在服务器的Retry-After头信息中
    		504505、...
    
    	自定义响应状态码
        	有的公司会有增加规定制作的响应状态码标识错误,并写在响应体中。
            如:{code:100}
    
  • 8.返回错误信息---> 响应体中带错误信息
    	{code:100,msg:成功}
    
    
  • 9.返回结果,针对不同操作,服务器向用户返回的结果用改符合以下规范
    	-- GET/collection:返回资源对象的列表/数组--->[{},{}]
            获取多条:---> {code:100,msg:成功,data[{name:论软饭硬吃,price:999.99,author:老刘},{name:富婆通讯录,price:888.88,author:老刘}]}
            
    	-- GET/collection/resource:返回单个资源对象--->{}
            获取单条:--->{code:100,msg:成功,data:{name:论软饭硬吃,price:999.99,author:老刘}}
            
    	-- POST/collection:返回新生成的资源对象--->{}
            新增数据:--->{code:msg:新增成功,data:{name:如何俘获富婆芳心,price:999.99,author:老刘}}
            
    	-- PUT/collection/resource:返回完整的资源对象--->{}
    	-- PATCH/collection/resource:返回完整的资源对象--->{}
            修改数据:--->{code:100,msg:修改成功,data:{name:富婆通讯录加强版,price:1888.88,author:老刘}}
                
    	-- DELETE/collection/resource:返回完整的资源对象--->{}
            删除数据:--->{code:100,msg:删除成功}
    
  • 10.响应中带链接
    	如下:
        	{
        "comments": [
            {
                "created_at": "Wed Jun 01 00:50:25 +0800 2011",
                "id": 12438492184,
                "text": "love your work.......",
                "source": "<a href="http://weibo.com" rel="nofollow">新浪微博</a>",
                "mid": "202110601896455629",
                "user": {
                    "id": 1404376560,
                    "screen_name": "zaku",
                    "name": "zaku",
                    "province": "11",
                    "city": "5",
                    "location": "北京 朝阳区",
                    "description": "人生五十年,乃如梦如幻;有生斯有死,壮士复何憾。",
                    "url": "http://blog.sina.com.cn/zaku",# 链接
                    "profile_image_url": "http://tp1.sinaimg.cn/1404376560/50/0/1",
                    "domain": "zaku",
                    "gender": "m",
    

5. 序列化与反序列化

# API接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式,序列化可以分为俩个阶段

	-- 序列化:把我们识别的数据转换成指定的格式提供给别人
    
    -- 反序列化:把别人提供的数据转换,还原成我们需要的格式

-- 列如:我们在django中获取到的数据默认都是模型对象(queryset),但是模型对象数据无法直接提供给前端使用
	这个时候我们就需要使用序列化,转化成Json格式的数据,提供给前端,然后前端通过反序列化转换成前端能够识别的数据使用。

6. Djangorest framework快速使用

# 使用Django这个Web框架,开发前后端分离项目(模板渲染),只写接口
	-- 使用JsonResPonse返回也可以完成--->原生Django
	--Djangorestframework方便快速写出符合restful规范的接口简称(DRF)
	
	# 写接口:总共就5个及5个的变形
		-获取所有:GET
		-获取单条:GET
		-新增一条:POST
		-修改一条:PUT/PATCH
		-删除一条:DELETE
            
	# DRF属于一个第三方插件需要在pip库内下载 
    	# 安装DRF 
        pip3.8 install djangorestframework

6.1 urls.py

from django.urls import path
from rest_framework.routers import SimpleRouter
from app01 import views

router = SimpleRouter()
router.register('books', views.BookView)

urlpatterns = [
    path('admin/', admin.site.urls),
]
urlpatterns += router.urls

6.2 views.py

from django.shortcuts import render

# Create your views here.


from .models import  Book
from rest_framework.viewsets import ModelViewSet

from .serializer import BookSerializer


class BookView(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerial

6.3 models.py

from django.db import models

# Create your models here.
class Book(models.Model):
    title = models.CharField(max_length=32)

6.4 serializer.py

from rest_framework import serializers

from .models import Book


class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = "__all__"


7. CBV源码分析

# cbv写好后,路由配置如下
	-第一个参数是路径,第二个参数是试图函数的内存地址(视图类执行as_view这个类方法,把它执行完,结果放在第二个参数上:我们猜执行完的结果是个函数内存地址)
	path('test/', views.TestView.as_view()),
    
    -去找as_view,去TestView类中找,找不到,没有,去父类中找View
        @classonlymethod
        def as_view(cls, **initkwargs):
            def view(request, *args, **kwargs):
                return self.dispatch(request, *args, **kwargs)
            return view
    -当请求来了,路由匹配成功,会执行view(request)--->本质执行self.dispatch(request, *args, **kwargs)
    -去View中找到了dispatch
        def dispatch(self, request, *args, **kwargs):
            # 请求方式转成小写,假设 get 请求,符合if条件
            if request.method.lower() in self.http_method_names:
                # 反射 getattr(对象,'字符串','默认值')
                # self是TestView的对象
                # handler 就是TestView类的get方法
                handler = getattr(self, 'get', self.http_method_not_allowed)
            else:
                handler = self.http_method_not_allowed
            return handler(request, *args, **kwargs)  # get(request)







posted @   瓮小辉  阅读(407)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示