前台与后台进行信息交互的媒介 -- url链接
url链接 - http://127.0.0.1:9000/api/users/
请求方式 - get(查), post(增), put(整体改), patch(局部改), delete(删)
请求参数 - 拼接参数, 数据包参数(urlencoded, json, form-data)
响应结果 - 响应的 json数据
开发阶段接口测试工具
1
|
Postman:
|
url
将数据返回给前台url
链接url 编写
https://api.baidu.com/books/?limit=3&ordering=-price
)请求方式
响应结果
基于restful接口规范的接口设计
1
|
urlpatterns = [
|
as_view方法完成路由配置,返回配置函数是 csrf_exempt(view),也就是禁用了csrf认证规则
所有继承APIView的子类,都不受csrf认证规则的限制
将请求处理的任务交给dispath方法完成
二次封装了原生Django的uwsgi协议的request对象,并做了向下兼容(原来request对象的内容,用现在的request对象都能访问)
将所有拼接参数都放在request.query_params中,将所有数据包参数都放在request.data中
路由的有名无名分组的数据还是保存在args和kwargs中
解析模块在 setting.py自定义解析设置
1
|
REST_FRAMEWORK = {
|
当三大认证模块和自己处理请求的视图逻辑没有出现异常时,会执行响应渲染模块
响应的数据会交给渲染模块来完成数据的渲染,渲染方式有两种:Json格式数据渲染、Brower格式数据渲染
自定义渲染模块解析配置
1
|
REST_FRAMEWORK = {
|
参数
1
|
"""
|
常见使用
1
|
Response(
|
初始化参数
1
|
def __init__(self, instance=None, data=empty, **kwargs):
|
models.py
1
|
from django.db import models
|
serializers.py
1
|
from rest_framework import serializers
|
views.py
1
|
from rest_framework.views import APIView
|
views.py
1
|
class UserAPIView(APIView):
|
反序列化
serializers.py
1: 不管是序列化还是反序列化字段,都必须在fields中进行声明,没有声明的不会参与任何过程(数据都会被丢弃)
2: 用 read_only 表示只读,用 write_only 表示只写,不标注两者,代表可读可写
3: 自定义只读字段,在model类中用@property声明,默认就是read_only
1
|
|
4: 自定义只写字段,在serializer类中声明,必须手动明确write_only
1
|
re_password = serializers.CharField(write_only=True)
|
特殊)在serializer类中声明,没有明确write_only,是对model原有字段的覆盖,且可读可写
password = serializers.CharField()
5: 用 extra_kwargs 来为 写字段 制定基础校验规则(了解)
6: 每一个 写字段 都可以用局部钩子 validate_字段(self, value) 方法来自定义校验规则,成功返回value,失败抛出 exceptions.ValidationError(‘异常信息’) 异常
7: 需要联合校验的 写字段们,用 validate(self, attrs) 方法来自定义校验规则,,成功返回attrs,失败抛出 exceptions.ValidationError({‘异常字段’: ‘异常信息’}) 异常
8: extra_kwargs中一些重要的限制条件
i)‘required‘:代表是否必须参与写操作,有默认值或可以为空的字段,该值为False;反之该值为True;也可以手动修改值
1
|
class AuthorModelSerializer(serializers.ModelSerializer):
|
1
|
"""
|
url.py
1
|
url(r‘^authors/$‘, views.AuthorAPIView.as_view()),
|
serializers.py
1
|
from rest_framework import serializers
|
views.py
1
|
# 实际开发,资源的大量操作都是查询操作,只有查需求的资源,可以采用子序列化
|
1
|
"""
|
urls.py
1
|
url(r‘^books/$‘, views.BookAPIView.as_view()),
|
models.py
1
|
class Book(BaseModel):
|
serializers
1
|
# 辅助序列化类
|
views.py
1
|
# 六个必备接口:单查、群查、单增、单删、单整体改(了解)、单局部改
|
1
|
"""
|
serializers.py
1
|
class BookModelSerializer(serializers.ModelSerializer):
|
1
|
"""
|
1
|
"""
|
models.py
1
|
|
urls.py
1
|
|
serializers.py
1
|
from rest_framework import serializers
|
views.py
1
|
from rest_framework.views import APIView |