当你发现自己的才华撑不起野心时,就请安静下来学习吧。

Personal site

↑点击传送

入门规范

入门规范

本周内容

#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

posted @ 2020-07-21 16:16  Joab-0429  阅读(152)  评论(0编辑  收藏  举报