web开发的两种模式:前后端不分离和前后端分离
RestFul API接口设计风格:前后端分离被广泛采用
使用Django基础自定义Rest API接口
DRF框架: 提高开发Rest API接口的效率
web开发的两种模式
前后端不分离:前端看到的效果是由后端进行控制的
缺点:只适用于纯网页的应用。
优点:有利于网站的SEO优化。
前后端分离:后端只返回前端所需的数据,至于数据怎么进行展示,由前端自己控制。
优点:可以对接不同类型的客户端。
缺点:不利于SEO优化
RestFul API接口设计风格介绍
统一接口设计风格:
1.URL地址尽量使用名词,不要出现动词
2.使用不同的请求方式,代表要执行不同的操作
(GET)获取 POST(新增) PUT(修改)DELETE(删除)
不常用:PATCH(修改) HEAD(只返回请求头没有请求体) OPTIONS(获取信息)
3.访问URL地址时,如果有一些过滤的参数,参数可以放到查询字符串中
4.响应数据:
GET /books/:返回所有的图书数据
GET /books/1/:返回id为1的图书数据
POST /books/:将新增的图书数据返回
PUT /books/1/:将修改的图书数据返回
DELETE /books/1:返回空文档
获取|修改:200
新增:201
删除:204
参数有误:400
服务器出错:500
5.响应数据的格式:json
了解:1.域名:使用专有域名
2.版本:将版本信息放在url地址
3.错误:将错误信息返回
4.在访问api接口时,将和接口相关的其他API接口的地址也在响应数据中返回
Django自定义RestAPI
需求:
设计一套符合RestAPI风格的接口,提供以下5个接口:
1. 获取所有图书数据:GET /books/
2. 新增一本图书数据:POST /books/
3. 获取指定的图书数据(根据id):GET /books/(?P<pk>\d+)/
4. 修改指定的图书数据(根据id):PUT /books/(?P<pk>\d+)/
5. 删除指定的图书数据(根据id):DELETE /books/(?P<pk>\d+)/
# 2个类视图
class BookListView(View):
# GET /books/
def get(self, request):
"""
获取所有图书数据:
1. 查询所有图书的数据
2. 将图书的数据进行返回
数据格式:json 状态码:200
"""
# 1. 查询所有图书的数据
books = BookInfo.objects.all() # QuerySet
# 组织数据
books_li = []
for book in books:
book_dict = {
'id': book.id,
'btitle': book.btitle,
'bpub_date': book.bpub_date,
'bread': book.bread,
'bcomment': book.bcomment,
'image': book.image.url if book.image else ''
}
books_li.append(book_dict)
# 2. 将图书的数据进行返回
# 注意点:将list转换为json数据时,需要将safe设置False
return JsonResponse(books_li, safe=False)
# POST /books/
# 参数:客户端传递 btitle,bpub_date,通过json传递
def post(self, request):
"""
新增一本图书数据:
1. 获取参数并进行校验:request.body->decode->json.loads
2. 创建图书并添加到数据库
3. 将新增的图书数据进行返回
数据格式:json 状态码:200
"""
pass
class BookDetailView(View):
# GET /books/(?P<pk>\d+)/
def get(self, request, pk):
"""获取指定的图书数据(根据id)"""
pass
# PUT /books/(?P<pk>\d+)/
def put(self, request, pk):
"""修改指定的图书数据(根据id)"""
pass
# DELETE /books/(?P<pk>\d+)/
def delete(self, request, pk):
"""删除指定的图书数据(根据id)"""
pass
DRF框架-RestAPI接口的核心工作
序列化:将模型对象转换为字典或者json的过程,叫做序列化的过程。
反序列化:将客户端传递的数据保存转化到模型对象的过程,叫做反序列化的过程。
核心:
1. 将数据库数据序列化为前端所需要的格式,并返回;
2. 将前端发送的数据反序列化为模型类对象,并保存到数据库中。
Django RestFrameWork 简介/安装
作用:提高RestAPI接口开发的效率
关键功能:
序列化器:序列化和反序列化
类视图,MiXin扩展类:简化视图代码的编写
安装: pip install djangorestframework
在settings.py的INSTALLED_APPS中添加’rest_framework’。
INSTALLED_APPS = [
...
'rest_framework', # 添加
]
DRF框架功能演示
序列化器Serializer-功能&知识点说明
功能:进行数据的序列化和反序列化
使用:首先定义序列化器类
序列化功能:将对象转换字典。
1.序列化单个对象
2.序列化多个对象
3.关联对象的嵌套序列化
反序列化功能:
数据校验:
1.基本验证
2.补充验证
数据保存
1.数据新增create
2.数据更新update
序列化器Serializer-定义&基本使用
定义模型类:
class 模型类(modles.Model):
模型字段 = models.字段类型(选项参数)
定义序列化器类:
from rest_framework import serializers
class 序列化器类(serializers.Serializer):
序列化器字段= serializers.字段类型(选项参数)
序列化器类(instance=None,data={
},**kwargs)
1.进行序列化操作,将对象传递给instance
2.进行反序列化操作,将数据传递给data
在tests.py文件中进行演示:
import os
import django
from django.test import TestCase
# Create your tests here.
if not os.environ.get("DJANGO_SETTINGS_MODULE"):
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "drf_demo.settings")
# 让django进行一次初始化
import django
django.setup()
from rest_framework import serializers
class User(object):
"""用户类"""
def __init__(self, name, age):
self.name = name
self.age = age
class