• 入门规范


    入门规范

    本周内容

    #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
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    leetcode 29-> Divide Two Integers without using multiplication, division and mod operator
    ros topic 发布一次可能会接收不到数据
    python中的print()、str()和repr()的区别
    python 部分函数
    uiautomatorviewer错误 unable toconnect to adb
    pyqt 不规则形状窗口显示
    appium 计算器demo
    Spring 3.0 注解注入详解
    Spring Autowire自动装配
    restful 学习地址
  • 原文地址:https://www.cnblogs.com/linqiaobao/p/13355729.html
Copyright © 2020-2023  润新知