首页 > 编程语言 >restful规范和django源码写接口

restful规范和django源码写接口

时间:2023-08-29 21:45:16浏览次数:46  
标签:name get price django book books https restful 源码

一、restful规范

1、restful规范是什么,如何来的?

  一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中 的规范

  Roy Fielding的博士论文提出的

2、以后写接口,大致都要遵循如下规范

-1 数据的安全保障-》url链接一般都采用https协议进行传输--》它比http安全

-2 接口特征表现--》url中带api标识
-https://api.baidu.com/books/
-https://www.baidu.com/api/books/

-3 多数据版本共存--》url中带版本信息
https://api.baidu.com/v1/books
https://www.baidu.com/api/v2/books

-4 数据即是资源,均使用名词(可复数)-->前后台交互,交互的数据称之为资源
-数据即资源,前后端交互的数据称之为资源,url尽量使用名字
-https://127.0.0.1/api/v1/books/ -->表示对图书操作:增加,删除,查询,修改,都用这一个地址
-https://127.0.0.1/api/v1/get_all_books/ # 不符合restful规范
-https://127.0.0.1/api/v1/delete_books/# 不符合restful规范

-5 资源操作由请求方式决定
-get 请求获取数据(获取所有,获取单条)
-post 新增数据
-put 修改数据
-delete 删除数据
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 - delete请求:删除主键为1的书


-6 请求地址中带过滤条件---》只针对于搜索所有接口


-7 响应状态码(两层)
-http响应状态码: 1xx,2xx,3xx,4xx,5xx:https://www.sohu.com/a/278045231_120014184

-成功都返回200,而在响应体中带 状态码--->code不同公司就不一样
{
"code": 101,
"msg": "用户名或密码错误"
}

-补充一:mysql 错误操作都会有个 数字(10060) 文字解释
-补充二:
-https://open.weibo.com/wiki/Error_code

-8 响应中带错误信息
{
"code": 101,
"msg": "用户名或密码错误"
}

-9 不同操作,返回格式符合如下标准
GET /collection:返回资源对象的列表(数组)
# [{name:西游记,price:19},{name:三国,price:19}]
GET /collection/resource:返回单个资源对象
# {name:三国,price:19}
POST /collection:返回新生成的资源对象
# {name:三国,price:19}
PUT /collection/resource:返回完整的资源对象
# {name:三国演绎,price:19}
DELETE /collection/resource:返回一个空文档
#

---》大家都这么做
{
code:100
msg:查询成功
restult:[{name:西游记,price:19},{name:三国,price:19}]
}

-10 响应中带链接

二、django原生写books五个接口

1、将5个接口进行分类:带id的和不带id的各写一个视图函数

http://127.0.0.1/books/  get查询所有
http://127.0.0.1/books/  post新增一条

http://127.0.0.1/books/id  put修改一条
http://127.0.0.1/books/id  delete删除一条
http://127.0.0.1/books/id  get查询一条

2、views

class BookView(View):
    def get(self, request, *args, **kwargs):
        books = Book.objects.all()  # qs对象,不是列表,不能  序列化
        # 自己做---->序列化
        l = []
        for itme in books:
            l.append({'name': itme.name, 'price': itme.price})
        res = {'code': 100, 'msg': '查询成功', 'result': l}
        return JsonResponse(res)

    def post(self, request):
        in_data_dic = json.loads(request.body)  # 获取前端的post方法的json请求
        name = in_data_dic.get('name')
        price = in_data_dic.get('price')
        new_book = Book.objects.create(name=name, price=price)
        res = {'code': 100, 'msg': '添加成功', 'result': {'name': new_book.name, 'price': new_book.price}}
        return JsonResponse(res)

class BookDetailView(View):
    def put(self, request, pk):  # 修改数据
        # 取出前端传入的json数据---》request.body
        in_data_dic = json.loads(request.body)
        name = in_data_dic.get('name')
        price = in_data_dic.get('price')
        book = Book.objects.get(pk=pk)
        book.name = name
        book.price = price
        book.save()
        return JsonResponse({'code': 100, 'msg': '查询成功', 'result': {'name': book.name, 'price': book.price}})

    def delete(self, request, pk):
        book = Book.objects.get(pk=pk)
        Book.objects.filter(pk=pk).delete()

        return JsonResponse({'code': 200, 'msg': '删除成功', 'result': {'name': book.name}})

    def get(self, request, pk):
        try:
            book = Book.objects.get(pk=pk)
        except:
            return JsonResponse({'code': 200, 'msg': '查询的书籍不存在'})
        return JsonResponse({'code': 200, 'msg': '查询成功', 'result': {'name': book.name}})

  

 

 

 

 

 

  

标签:name,get,price,django,book,books,https,restful,源码
From: https://www.cnblogs.com/dgp-zjz/p/17665914.html

相关文章

  • drf-restful规范
    RESTfulAPI规范简介: REST全称是RepresentationalStateTransfer,中文意思是表述(编者注:通常译为表征性状态转移)。它首次出现在2000年RoyFielding的博士论文中。""" RESTful是一种定义WebAPI接口的设计风格,尤其适用于前后端分离的应用模式中。"""这种风格的理念认为后端......
  • django自带的cache缓存框架使用
    https://docs.djangoproject.com/zh-hans/4.2/topics/cache/#top主要步骤官网也写得很清楚了,包含怎么区使用。这里就展示一些配置django-redis来使用#settings.pyCACHES={'default':{#默认,预留'BACKEND':'django_redis.cache.RedisCache','......
  • ArrayList 源码分析
    ArrayList简介ArrayList的底层是数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加ArrayList实例的容量。这可以减少递增式再分配的数量。ArrayList继承于AbstractList,实现了List,RandomAcc......
  • Django CMS搭建--1.虚拟环境搭建
    客户端环境:windows101.virtualenv使用virtualenv是Python中的一个包,用于创建和管理虚拟环境,可以在不同的项目中使用不同的Python版本和第三方库,避免了全局环境和项目之间的冲突。1.1命令行cmd安装:pipinstallvirtualenv1.2创建虚拟环境myvenv,激活后,你会看到命令行前......
  • RESTful API规范,序列化,Django Rest_Framework
    一.RESTfulAPI规范REST全称是RepresentationalStateTransfer,中文意思是表述(编者注:通常译为表征性状态转移)。它首次出现在2000年RoyFielding的博士论文中。RESTful是一种定义WebAPI接口的设计风格,尤其适用于前后端分离的应用模式中。这种风格的理念认为后端开发任......
  • 医学影像信息系统源码(PACS)
    影像信息系统(PACS)可接收和显示多种设备的不同影像,比如CT、DR、B超和彩超等,具有医学影像获取、存档、观片、处理、打印和多种管理功能。使资料保存更加完整,共享性更强。医生可以方便的对影像资料进行浏览、拷贝和光盘刻录,支持院内会诊和远程会诊,最终实现与与医院其他系统及设备无缝......
  • ArrayList源码阅读之EMPTY_ELEMENTDATA和DEFAULTCAPACITY_EMPTY_ELEMENTDATA区别
    /***Sharedemptyarrayinstanceusedforemptyinstances.*/privatestaticfinalObject[]EMPTY_ELEMENTDATA={};/***Sharedemptyarrayinstanceusedfordefaultsizedemptyinstances.We*distinguishthisfromEMPTY_ELEMENTDATAtoknowhowmuchtoi......
  • 直播带货源码,RecyclerView横向导航条目出现
    直播带货源码,RecyclerView横向导航条目出现/** *RecyclerView移动到当前位置, * *@parammanager  设置RecyclerView对应的manager *@parammRecyclerView 当前的RecyclerView *@paramn 要跳转的位置 */publicstaticvoidMoveToPosition(LinearLayoutManager......
  • 你是如何阅读jdk源码的?
    阅读别人的代码作为开发人员是一件经常要做的事情。一个是学习新的编程语言的时候通过阅读别人的代码是一个最好的学习方法,另外是积累编程经验。如果你有机会阅读一些操作系统的代码会帮助你理解一些基本的原理。还有就是在你作为一个质量保证人员或一个小领导的时候如果你要做白盒......
  • 个人相册管理系统-计算机毕业设计源码+LW文档
    随着社会的发展,人们生活水平的 提高,网络科技和云端技术的完善,越来越多的人喜欢通过拍照的方式把生活中美好的事物以及一瞬间记录下来,但是随着照片越来越多,传统的相册已经不能满足我们的基本需求,不方便携带,也不方便与他人分享。这个时候,网络个人相册就能解决这些问题,不光能保存大量......