【愚公系列】2022年04月 Python教学课程 61-Django框架Resful接口

RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。

RESTFUL特点包括:

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\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:
"""

        books = BookInfo.objects.all()

        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)

        return JsonResponse({'book_list': book_list})

    def post(self, request):
"""
            保存图书
        :param request:
        :return:
"""

        data = request.body.decode()
        data_dict = json.loads(data)

        btitle = data_dict.get('btitle')
        bpub_date = data_dict.get('bpub_date')
        if btitle is None or bpub_date is None:
            return JsonResponse({'error': '缺少必要数据'})

        book = BookInfo.objects.create(btitle=btitle, bpub_date=bpub_date)

        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:
"""

        try:
            book = BookInfo.objects.get(id=pk)
        except:
            return JsonResponse({'error': '错误的id值'})

        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:
"""

        data = request.body.decode()
        data_dict = json.loads(data)

        btitle = data_dict.get('btitle')
        bpub_date = data_dict.get('bpub_date')
        if btitle is None or bpub_date is None:
            return JsonResponse({'error': '缺少必要数据'})

        num = BookInfo.objects.filter(id=pk).update(**data_dict)

        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:
"""

        try:
            book = BookInfo.objects.get(id=pk)
        except:
            return JsonResponse({'error': '错误的id值'})

        book.is_delete = True
        book.save()

        return JsonResponse({})

Resful接口增删改查接口说明:

1、查询

查询传统REST查询所有http://localhost:8080/employee/listhttp://localhost:8080/employees查询单个http://localhost:8080/employee/list?id=1http://localhost:8080/employees/1

2、添加

添加传统REST添加http://localhost:8080/employee/addhttp://localhost:8080/employees

3、修改

修改传统REST修改http://localhost:8080/employee/updatehttp://localhost:8080/employees

4、删除

删除传统REST删除http://localhost:8080/employee/deletehttp://localhost:8080//employees/{id}

返回状态码说明:

状态码含义200OK – [GET] 服务器成功返回用户请求的数据201CREATED – [POST/PUT/PATCH] 用户新建或修改数据成功202Accepted 表示一个请求已经进入后台排队(异步任务)204NO CONTENT – [DELETE] 用户删除数据成功400INVALID REQUEST – [POST/PUT/PATCH] 用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的401Unauthorized – [] 表示用户没有权限(令牌、用户名、密码错误)403Forbidden – [] 表示用户得到授权(与401错误相对),但是访问是被禁止的404NOT FOUND – [] 用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的405Method Not Allowed 方法不允许,服务器没有该方法406Not Acceptable – [GET] 用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)410Gone -[GET] 用户请求的资源被永久删除,且不会再得到的422Unprocesable entity – [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误500INTERNAL SERVER ERROR – [] 服务器发生错误,用户将无法判断发出的请求是否成功

Original: https://blog.csdn.net/aa2528877987/article/details/124113826
Author: 愚公搬代码
Title: 【愚公系列】2022年04月 Python教学课程 61-Django框架Resful接口

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/735750/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【Python – 基础】基础是一切升华的根本

    以下仅做相关知识的简述,更深入的了解和学习,请自行查阅资料或留言。 Python是一种编程语言,可以让您更快地工作,并更有效地集成您的系统。Python is a programm…

    Python 2023年11月2日
    039
  • python读取pcd点云/转numpy(python2+python3,非ROS环境)

    0.引言 \qquadROS的PCL库支持python读取点云,ROS1关联的是python2(2.7),ROS2关联的是python3(>=3.5),但这对于windows…

    Python 2023年8月25日
    0129
  • centos8 安装python+redis+mysql+nginx

    安装新建coding目录, 编译安装软件 mkdir /coding cd coding 1. 编译安装 python 安装依赖包 yum install zlib-devel b…

    Python 2023年6月10日
    081
  • Numpy数组和矩阵

    1.numpy 主要用于高维的数组运算,拥有运算速度快的 数学库;Numpy 支持常见的数组和矩阵操作。Numpy 使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大…

    Python 2023年8月24日
    057
  • Java-String 类·下

    大家好,我是晓星航。今天为大家带来的也是Java String字符串的讲解!😀 5. 字符, 字节与字符串 字符串内部包含一个字符数组,String 可以和 char[] 相互转换…

    Python 2023年11月6日
    039
  • 小王,给这2000个客户发一下节日祝福的邮件

    【阅读全文】演示示例使用QQ邮箱发送邮件,先获取自己的QQ邮箱的授权码。因为后面发送邮件时需要使用自己的授权码作为邮箱的密码登录邮箱最后达到发送邮件的目的。 将UI处理的相关的界面…

    Python 2023年11月9日
    040
  • python pandas数据处理和基本操作

    本文介绍的方法均为我在做作业是常用的方法,要是有不对的地方还请大神指正 本文示例文件 排名,姓&#x540…

    Python 2023年8月19日
    046
  • python日志无输出

    python logging一场 disabled引发的血案以fastapi为例,启动用的 uvicorn.run()当用户配置了自己日志之后,框架自带的日志就无输出了这篇文章以两…

    Python 2023年8月10日
    070
  • SpringCloud第五话 — Gateway实现负载均衡、熔断、限流

    本文主要记录gateway实现路由转发,负载均衡,熔断和限流 环境准备 注册中心Nacos,也可以其他 springboot 2.6.8 spring-cloud-dependen…

    Python 2023年11月7日
    032
  • python—数据分析(二)

    Series和DataFrame中数据的基本功能: reindex方法是创建一个新对象,其数据对Series和DataFrame的新索引,它们的主要区别在DataFrame可以对i…

    Python 2023年8月8日
    055
  • 《python 数据可视化基础》第一章 折线图 plot

    《python 数据可视化基础》第一章 折线图 本章节内容包括以下几方面内容: 绘制曲线y = x 2 y=x^2 y =x 2; 让曲线更加光滑; 常见的相关属性设置; 多条折线…

    Python 2023年8月31日
    044
  • 2022.04.11

    课时41 数据索引的练习 multiIndex-复合索引 也可以通过xx.index=[ ]来重新赋值一个索引。 也可以用reindex函数。 最后的f一行为nan,因为原本的f那…

    Python 2023年8月21日
    041
  • 下载文件时,浏览器是怎么知道文件名称的?

    当你在浏览器里下载一个文件时,浏览器是如何知道你所下载的文件的名称的呢?这或许是你从未考虑过的事情,但浏览器必须知道,否则,它就不知道如何保存文件。 ; 1. Content-Di…

    Python 2023年8月14日
    091
  • Pandas求两个dataframe差集 详解

    1、交集 intersected=pd.merge(df1,df2,how=’inner’) 延伸(针对列求交集)intersected=pd.merge(…

    Python 2023年8月6日
    030
  • 真值表(Ⅰ)

    题目描述 同学们都学习过《离散数学》这门课程,知道真值表是用于逻辑中的一类数学用表,用来计算逻辑表示式在每一个逻辑变量取值组合下的值。在这里我们给定一个逻辑表达式,要求生成对应的真…

    Python 2023年6月12日
    0134
  • 利用BARK和Telebot进行VPS实时预警推送

    前言 在服务器的日常维护和蓝队的日常监控中,经常需要对服务器出现的各种问题进行及时的预警推送。国外的服务器推荐使用 telebot,而国内由于特殊的网络环境,则推荐使用 BARK、…

    Python 2023年6月12日
    0114
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球