zoukankan      html  css  js  c++  java
  • 入门规范

    入门规范

    本周内容

    #django-rest-framework(drf)入门规范
    #drf序列化组件
    #drf请求响应与响应
    #drf视图组件
    #drf路由组件
    #drf三大认证:认证、权限、频率
    #drf过滤排序分页异常处理
    #drf自动生成接口文档
    #drf-django-rest-framework-jwt(JWT)认证
    #drf-xadmin的使用
    #BOOK系列多表群操作
    #RBAC基于角色的访问控制
    

    1 web开发模式

    #前后端混合开发:后端返回的是html内容,需要写模板
    #前后端分离开发:专注于写后端接口,返回json、xml格式数据
    #json格式
    	{"name":"joab","age":18}
    #xml格式
        <xml>
        <name>joab</name>
        <age>18</age>
        </xml>
    #jave的jsp格式
    #php写的
    #python写的
    
    #什么是动态页面(查数据的),什么是静态页面(静止的html)
    #页面静态化
    

    api接口

    #通过网络,规定了前后端信息交互规则的url链接,也就是前后台信息交互的媒介
    #列如:http://127.0.0.1:8000/app01/car/	获取app01应用下的所有车型接口
    

    postman的使用

    #postman是目前最好用的,模拟发送http请求的工具
    #双击安装、安装完成打开不需要注册
    #解析json的网站
    	http://www.json.cn/
    #请求头中User-Agent:是客户端的类型,还有其他的参数自己查看一下
    #批量接口导出和测试,实操一下
    

    Restful规范(重点)

    #REST全称是Representational State Transfer,中文意思是表述(通常编译为表征状态转移),它首次出现在200年的菲尔丁(Roy Fielding)博士的论文中
    #RESTFUL是一种定义Web API接口设计规范,尤其与用于前后端的应用模式中
    
    #这种风格的理念认为后端开发任务就是提供数据的,对提供的是数据资源的接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源
    
    #事实上,我们可以使用任何一个框架都可以实现restful规范的API接口
    
    #抓包工具:fiddler,charles
    
    #10条restful规范
    1 数据的安全保障:url链接一般都采用https协议,可以提高数据交互过程中的安全性
    2 接口的特征表现,一看就知道是个api接口
    	https://api.baidu.com
    	https://baidu.com/api
    	看到api字眼,就代表该请求url是完成前后台数据交互
    	#路飞的接口:https://api.luffycity.com/api/v1/course/free/
    3 多数据版本共存
    	在url链接中标示数据版本
    	https://api.baidu.com/v1
    	https://api.baidu.com/v2
    	url链接中的v1、v2就是不同数据版本的体现(只有在一种数据资源有多版本的情况下)
    4 数据即资源,均使用名词(可复数)
    	接口一般都是完成前后台数据的交互,交互的数据我们称之为资源
    	http://127.0.0.1/users
    	http://127.0.0.1/books
    	http://127.0.0.1/cars
    	#一般提倡用资源的复数形式,不要出现动词
    	#特殊的的接口可以出现动词,因为这些接口没有一个明确的资源,或是动词(login)就是接口的核心含义
    5 资源操作由请求方式决定,操作资源一般都会涉及增删查改,我们提供请求方式来标示增删查改动作
    	  - 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 - patch:局部修改为1的书(基本不用,主要用put即可)
          - https://api.baidu.com/books/1 - delete:删除主键为1的书
    6 过滤,通过在url上传的形式传递搜索条件
    	https://api.baidu.com/v1/zoos?limit=10	指定返回的数量
    	https://api.baidu.com/v1/zoos?offset=10	指定返回的开始位置
    	https://api.baidu.com/v1/zoos?page=2&order=asc	指定返回结果按照那个属性排序以及排序顺序
    	https://api.baidu.com/v1/zoos?animal_type_id=1	指定筛选条件
    7 响应状态码
    	1 200x正常响应
    		200 请求成功
    		201 创建成功
    	2 3xx重定向响应
    		301 永久重定向
    		302 临时重定向
    	3 4xx客户端异常
    		403 请求无权限
    		404 请求路径不存在
    		405 请求方式不存在
    	4 5xx服务端异常
    		500 服务端异常
    8 错误处理,应返回错误信息,error当做key
    	{error:"错误信息"}
    9 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范
    	GET/collection	返回资源对象的列表(数组)
    	GET/collection/resourse	返回单个资源对象
    	POST/collection/	返回新生成的资源对象
    	PUT/collection/resourse	返回完整的资源对象
    	PATCH/collection/resourse	返回完整的资源对象
    	DELETE/collection/resourse	返回一个空文档
    10 需要url请求的资源需要访问资源的请求链接
        {"states": 100,
         "msg": "OK",
         "data": [
        	{"name": "egon",
        	"age": 18}
        ]}
    

    drf的安装和简单使用

    #安装
    	pip3 install djangorestframework==3.10.3
    #使用
    	1 在setting.py 的app中注册
    		INSTALLED_APPS = [
    		'rest_framework',
    		]
    	2 在models.py中写表模型
    	class Book(models.Model):
            id = models.AutoField(primary_key=True)#可以不写id主键字段,会自动生成
            name = models.CharField(max_length=32)#CharField字段必须加max_length参数
            price = models.DecimalField(decimal_places=2,max_digits=6)#decimal_places保留小数2位,max_digits做大位数6位
            author = models.CharField(max_length=32)
    	3 新建一个序列化类
    		from rest_framework import serializers
    
            from app01.models import Book
    
    
            class BookModelSerializer(serializers.ModelSerializer):
    
                class Meta:#嵌套类,给上级类添加属性或功能
                    model = Book
                    fields = "__all__"
    	4 在视图中写视图类
        from rest_framework.viewsets import ModelViewSet
        from .models import Book
        from .ser import BookModelSerializer
    
    
        class BooksViewSet(ModelViewSet):#继承ModelViewSet可以自动生成路由
            queryset = Book.objects.all()
            serializer_class = BookModelSerializer
        5 写路由关系
        	from app01 import views
            #导入路由
            from rest_framework.routers import DefaultRouter
            #实例化路由对象
            router = DefaultRouter()
            #注册
            router.register('book',views.ModelViewSet)
            urlpatterns = [
                path('admin/', admin.site.urls),
            ]
            #加入到路由中
            urlpatterns += router.urls
         #之后就有5个接口可以使用了,postman测试即可
    

    补充

    #一切皆对象
        def func(a,b):
            return a+b
    
    
        func.name = "joab" #由于一切皆对象,函数也是对象,可以给他赋值
    
        print(func.name)#joab
    #局部进入csrf,两种方式
    	1 视图函数上写@csrf_exempt,需要导入from django.views.decorators.csrf import csrf_exempt
    	2 路由里写path('login/', csrf_exempt(views.login)),跟上面是一样的,需要导入from django.views.decorators.csrf import csrf_exempt
    

    作者:linqiaobao
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    课堂练习四
    手头软件产品的评价
    学习进度条十
    典型用户和用户场景描述
    学习进度条九
    学习进度条八
    冲刺第十天
    冲刺第九天
    冲刺第八天
    冲刺第七天
  • 原文地址:https://www.cnblogs.com/linqiaobao/p/13355729.html
Copyright © 2011-2022 走看看