入门规范
入门规范
本周内容
#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