【愚公系列】2022年04月 Python教学课程 61-Django框架Resful接口
【摘要】 一、Resful接口介绍RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。RESTFUL特点包括:每一个URI代表1种资源;客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务...
一、Resful接口介绍
RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。
RESTFUL特点包括:
- 每一个URI代表1种资源;
- 客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
- 通过操作资源的表现形式来操作资源;
- 资源的表现形式是XML或者HTML;
- 客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。
二、相关案例
1.Django中Resful路由代码
from django.conf.urls import url
from django.contrib import admin
from . import views
urlpatterns = [
# 获取所有和保存图书
url(r'^books/$',views.BooksView.as_view() ),
url(r'^books/(?P<pk>\d+)/$',views.BookView.as_view() ),
]
2.Django中Resful业务代码
import os
from django.shortcuts import render, reverse
from django.views import View
from book.models import BookInfo, HeroInfo
from django.conf import settings
from django.http import JsonResponse, HttpResponse
from django.template import loader
import json
class BooksView(View):
"""
获取所有图书和保存图书
"""
def get(self, request):
"""
获取所有图书
:param request:
:return:
"""
# 1、查询图书表获取所有图书对象
books = BookInfo.objects.all()
# 2、提取所有对象的字段内容
book_list = []
for book in books:
data = {
'id': book.id,
'btitle': book.btitle,
'bread': book.bread,
'bpub_date': book.bpub_date
}
book_list.append(data)
# 3、返回所有对象字段内容
return JsonResponse({'book_list': book_list})
def post(self, request):
"""
保存图书
:param request:
:return:
"""
# 1、获取保存的图书数据
data = request.body.decode()
data_dict = json.loads(data)
# 2、验证图书数据字段
btitle = data_dict.get('btitle')
bpub_date = data_dict.get('bpub_date')
if btitle is None or bpub_date is None:
return JsonResponse({'error': '缺少必要数据'})
# 3、保存图书
book = BookInfo.objects.create(btitle=btitle, bpub_date=bpub_date)
# 4、返回保存后的图书数据
return JsonResponse(
{
'id': book.id,
'btitle': book.btitle,
'bread': book.bread,
'bpub_date': book.bpub_date
}
)
class BookView(View):
"""
获取单一图书数据
更新图书
删除图书
"""
def get(self, request, pk):
"""
获取单一图书数据
:param request:
:param pk:
:return:
"""
# 1、根据pk值查询图书对象
try:
book = BookInfo.objects.get(id=pk)
except:
return JsonResponse({'error': '错误的id值'})
# 2、返回图书数据
return JsonResponse(
{
'id': book.id,
'btitle': book.btitle,
'bread': book.bread,
'bpub_date': book.bpub_date
}
)
def put(self, request, pk):
"""
更新图书
:param request:
:param pk:
:return:
"""
# 1、获取保存的图书数据
data = request.body.decode()
data_dict = json.loads(data)
# 2、验证图书数据字段
btitle = data_dict.get('btitle')
bpub_date = data_dict.get('bpub_date')
if btitle is None or bpub_date is None:
return JsonResponse({'error': '缺少必要数据'})
# 3、更新图书
# try:
# book = BookInfo.objects.get(id=pk)
# except:
# return JsonResponse({'error': '错误的id值'})
#
# book.btitle=btitle
# book.bpub_date=bpub_date
# book.save()
# {'name':'python'} name=python {'btitle':'书名'}
num = BookInfo.objects.filter(id=pk).update(**data_dict)
# 4、返回保存后的图书数据
book = BookInfo.objects.get(id=pk)
return JsonResponse(
{
'id': book.id,
'btitle': book.btitle,
'bread': book.bread,
'bpub_date': book.bpub_date
}
)
def delete(self, request, pk):
"""
删除图书
:param request:
:param pk:
:return:
"""
# 1、查询删除的图书对象
try:
book = BookInfo.objects.get(id=pk)
except:
return JsonResponse({'error': '错误的id值'})
# 2、逻辑
book.is_delete = True
book.save()
# 物理删除
# book.delete()
# 3、返回结果
return JsonResponse({})
总结
Resful接口增删改查接口说明:
1、查询
查询 | 传统 | REST |
---|---|---|
查询所有 | http://localhost:8080/employee/list | http://localhost:8080/employees |
查询单个 | http://localhost:8080/employee/list?id=1 | http://localhost:8080/employees/1 |
2、添加
添加 | 传统 | REST |
---|---|---|
添加 | http://localhost:8080/employee/add | http://localhost:8080/employees |
3、修改
修改 | 传统 | REST |
---|---|---|
修改 | http://localhost:8080/employee/update | http://localhost:8080/employees |
4、删除
删除 | 传统 | REST |
---|---|---|
删除 | http://localhost:8080/employee/delete | http://localhost:8080//employees/{id} |
返回状态码说明:
状态码 | 含义 |
---|---|
200 | OK - [GET] 服务器成功返回用户请求的数据 |
201 | CREATED - [POST/PUT/PATCH] 用户新建或修改数据成功 |
202 | Accepted 表示一个请求已经进入后台排队(异步任务) |
204 | NO CONTENT - [DELETE] 用户删除数据成功 |
400 | INVALID REQUEST - [POST/PUT/PATCH] 用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的 |
401 | Unauthorized - [*] 表示用户没有权限(令牌、用户名、密码错误) |
403 | Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的 |
404 | NOT FOUND - [*] 用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的 |
405 | Method Not Allowed 方法不允许,服务器没有该方法 |
406 | Not Acceptable - [GET] 用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式) |
410 | Gone -[GET] 用户请求的资源被永久删除,且不会再得到的 |
422 | Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误 |
500 | INTERNAL SERVER ERROR - [*] 服务器发生错误,用户将无法判断发出的请求是否成功 |
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)