热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Djangorestframework框架01

[TOC]前后台交互前台部分:首先先在终端下载axios插件,插件被下载到node_modules文件夹内了,这样全局都能导出axios插件;以后只要有使用axios插件都要重新安

目录

  • 前后台交互
  • drf(Django-restframework)框架安装
  • 接口
  • yapi编写接口文档
  • 接口测试工具:Postman
  • restful接口规范
  • 基于restful规范书写的十大常用接口
  • debug使用说明

前后台交互

前台部分:

首先先在终端下载axios插件,插件被下载到node_modules文件夹内了,这样全局都能导出axios插件;以后只要有使用axios插件都要重新安装到当前项目内:

? cnmp install axios

// main.js
import axios from 'axios'
Vue.prototype.$axios = axios;




后台部分:

# settings.py 配置
INSTALLED_APPS = [
           'corsheaders',
        ]
MIDDLEWARE = [
      # 'django.middleware.csrf.CsrfViewMiddleware', # 注销掉
    'corsheaders.middleware.CorsMiddleware'  # 注册cors
]

# 打开跨域
CORS_ORIGIN_ALLOW_ALL = True
# 自己定义请求头,不适用系统的了,但要加上系统自带的
CORS_ALLOW_HEADERS = [
    # 系统的
    "accept",
    "accept-encoding",
    "authorization",
    "content-type",
    "dnt",
    "origin",
    "user-agent",
    "x-csrftoken",
    "x-requested-with",
    # 自己定义的
    "token",
    "zhang",
]
#urls.py
from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^test/$', views.test),
]
from django.http import JsonResponse

# Create your views here.


def test(request):
    import json
    print(request.method)
    print(request.GET)  # 
    res=json.loads(request.body)  # {'x': 10}
    print(res)

    print(request.META.get('HTTP_AUTHORIZATION'))  # abc.def.xyz
    return (JsonResponse('ok',safe=False))

前台headers内数据传到后台request.META中,META还携带有其他的参数,参看下图:

技术图片

技术图片

技术图片

drf(Django-restframework)框架安装

1) drf 是Django的插件,所以要提前安装Django;
2)安装命令:pip install restframework;
3) 使用drf时,要在settings注册; import rest_framework

接口

通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介

Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点

  • url:长得像返回数据的url链接
    • https://api.map.baidu.com/place/v2/search
  • 请求方式:get、post、put、patch、delete
    • 采用get方式请求上方接口
  • 请求参数:json或xml格式的key-value类型数据
    • ak:6E823f587c95f0148c19993539b99295
    • region:上海
    • query:肯德基
    • output:json
  • 响应结果:json或xml格式的数据
    • 上方请求参数的output参数值决定了响应数据的格式
什么是接口?===>url链接
    采用某种请求方式提交参数,获得响应的响应数据结果的url链接
    https://www.baidu.com  # 网址
     https://www.baidu.com/search
     四部分:url链接+请求方式+请求参数+相应数据{
    "status":0,
    "message":"ok",
    "results":[
        {
            "name":"肯德基(罗餐厅)",
            "location":{
                "lat":31.415354,
                "lng":121.357339
            },
            "address":"月罗路2380号",
            "province":"上海市",
            "city":"上海市",
            "area":"宝山区",
            "street_id":"339ed41ae1d6dc320a5cb37c",
            "telephone":"(021)56761006",
            "detail":1,
            "uid":"339ed41ae1d6dc320a5cb37c"
        }
        ...
        ]
}

yapi编写接口文档

'''
一个开源可视化接口管理平台,YApi项目可以搭建在任何本地或云服务器上,完成后台项目开发时的接口编写。为开发。测试等人员提供可视化的接口预览
'''

从这里进去:yapi测试网站

个人账户:zhangchao 密码:与相关一致

用上面数据写出的一个小示例:

接口测试工具:Postman

这里下载:点击进入下载

下载完毕,在双击安装的时候遇到了一个错误,如下:

技术图片

需要网上下载一个系统配置:

解决办法:

技术图片

1.安装系统更新补丁KB2533623,下载地址:

安装之后双击电脑会自动更新配置,之后再重新启动电脑即可。

postman测试后台数据的界面解释:

技术图片

restful接口规范

点击这里看重点:restful更多规范

url链接:
    1)接口都是操作前后台数据的,所以需要保证数据的安全性的
        采用https协议
     2)接口用来操作数据,与网址(操作页面)有区别,所以用特定的关键字表示接口;
        API关键字
            -https://api.baidu.com
             -https://www.baidu/api
     3) 接口操作的数据称之为 资源,在url中只体现资源 名称(空间),不体现操作资源的方式动词常规接口:
        - https://api.baidu.com/books/
         - https://api.baidu.com/books/(pk)/
        非常规接口 :和某资源不是特别密切或者不是一种资源
            - https://api.baidu.com/login/
             - https://api.baidu.com/place/search/
     4)如果一个资源存在多版本结果,在url链接中要用特定符号来兼容多版本共存;
        v1|v2
        - https://api.baidu.com/v1/books/
         - https://api.baidu.com/v2/books/
     5) 群资源操作,一般还有额外的限制条件,如排序、限制调试、分页等等;
            ?限制条件
                - https://api.baidu.com/v1/books/?ordering=-price&limit=3
     6) 五大请求方式:
        get:获取单个或多个资源
            - https://api.baidu.com/books/ ==>群查,返回多个结果对象
            - https://api.baidu.com/books/(pk)/ ==>单查,返回单个结果对象
         post:新增单个或多个资源
            - https://api.baidu.com/books/
                单增:提交单个数据字典,完成单增,返回单个结果对象
                群增:提供多个数据字典的数组,完成群增,返回多个结果对象
         put:整体修改单个或多个资源
            - https://api.baidu.com/books/(pk)/
                整体修改单个,提供单个数据字典(主键在url中体现),完成单改,返回单个结果对象
         patch:局部修改单个或多个资源
            方式与put完全相同,不同的是:操作的资源如果有5个key-value键值对,put请求提供的字典必须全包含,但是patch提供的字典包含的键值对0-5都可以
         delete:删除单个或多个资源
            -https://api.baidu.com/books/
                多删:提供多个资源主键数据,完成群删,不做任何资源返回(一般我们会返回结果信息:成功|失败)
                单删:不需要提供额外数据,完成单删,不做任何资源返回(一般我们会返回结果信息:成功|失败)
         
响应结果:
7)响应对象中要包含网络状态码(网络状态信息和网络状态码捆绑出现,不要额外设置):
    1xx:基本信息
    2xx:成功 - 200 基本 201新增成功
    3xx:重定向
    4xx:客户端错误 - 400错误请求;403请求无权限;404请求资源不存在;
    5xx:服务端错误 - 500服务器错误
    
8) 数据状态码(一般都是前后台约定规则)
    0:成功
    1:失败 - 1xx:具体失败信息(要再接口文档中明确写出)
    2:无数据 -2xx:具体无数据信息(要在接口文档中明确写出)
9)数据状态信息(一般不仅仅是对数据状态码的解释,更是对结果的描述,给前台开发者阅读的)
10)数据结果(常量、数组、字典),如果有子资源(图片、音频、视频),返回资源的url链接;
'''
{
    "status":0,
    "msg":'ok',
    "results":[{
        "name":"西游记",
        "img":"https://api.baidu.com/media/book/xyj.png"
        }]
    }
'''    

基于restful规范书写的十大常用接口

一个视图类可以包括五个常规请求方法:get|post|put|patch|delete
五个请求方法处理十个资源操作的逻辑:单群查|单群增|单群整体改|单群局部改|单群删
# d_proj(app)>urls.py
# 总路由路由分发
from django.conf.urls import url,include
from app import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api/',include('api.urls')),
]

# api(app)>urls.py
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^books/$', views.BookView.as_view()),
    url(r'^books/(?P\d+)/$', views.BookView.as_view()),
]



#api(app)views.py
from django.http import JsonResponse
from django.views import View
from . import models

class BookView(View):
    def _single_get(self, pk):
        book_dic = models.Book.objects.filter(pk=pk).values('name', 'price').first()
        if not book_dic:
            return JsonResponse({
                'status': 1,
                'msg': '单查 资源不存在',
            })
        return JsonResponse({
            'status': 0,
            'msg': '单查 ok',
            'results': book_dic
        })
    def _many_get(self):
        book_query = models.Book.objects.values('name', 'price')
        book_list = list(book_query)
        return JsonResponse({
            'status': 0,
            'msg': '群查 ok',
            'results': book_list
        })

    def get(self, request, *args, **kwargs):
        pk = kwargs.get('pk')
        if pk:  # 单查
            return self._single_get(pk)
        else:  # 群查
            return self._many_get()

    def post(self, request, *args, **kwargs):
        return JsonResponse({
            'status': 0,
            'msg': 'post ok'
        })

    def put(self, request, *args, **kwargs):
        return JsonResponse({
            'status': 0,
            'msg': 'put ok'
        })

    def patch(self, request, *args, **kwargs):
        return JsonResponse({
            'status': 0,
            'msg': 'patch ok'
        })

    def delete(self, request, *args, **kwargs):
        return JsonResponse({
            'status': 0,
            'msg': 'delete ok'
        })

debug使用说明

不会使用debug就不是一个合格的开发!!!!

技术图片

技术图片

Django-restframework框架01


推荐阅读
  • 本指南详细介绍了如何利用华为云对象存储服务构建视频点播(VoD)平台。通过结合开源技术如Ceph、WordPress、PHP和Nginx,用户可以高效地实现数据存储、内容管理和网站搭建。主要内容涵盖华为云对象存储系统的配置步骤、性能优化及安全设置,为开发者提供全面的技术支持。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 本文详细解析了Autofac在高级应用场景中的具体实现,特别是如何通过注册泛型接口的类来优化依赖注入。示例代码展示了如何使用 `builder.RegisterAssemblyTypes` 方法,结合 `typeof(IEventHandler).Assembly` 和 `Where` 过滤条件,动态注册所有符合条件的类,从而简化配置并提高代码的可维护性。此外,文章还探讨了这一方法在复杂系统中的实际应用及其优势。 ... [详细]
  • VS2019 在创建 Windows 恢复点时出现卡顿问题及解决方法
    在使用 Visual Studio 2019 时,有时会在创建 Windows 恢复点时遇到卡顿问题。这可能是由于频繁的自动更新导致的,每次更新文件大小可能达到 1-2GB。尽管现代网络速度较快,但这些更新仍可能对系统性能产生影响。本文将探讨该问题的原因,并提供有效的解决方法,帮助用户提升开发效率。 ... [详细]
  • 深入解析:Synchronized 关键字在 Java 中对 int 和 Integer 对象的作用与影响
    深入探讨了 `Synchronized` 关键字在 Java 中对 `int` 和 `Integer` 对象的影响。尽管初看此题似乎简单,但其实质在于理解对象的概念。根据《Java编程思想》第二章的观点,一切皆为对象。本文详细分析了 `Synchronized` 关键字在不同数据类型上的作用机制,特别是对基本数据类型 `int` 和包装类 `Integer` 的区别处理,帮助读者深入理解 Java 中的同步机制及其在多线程环境中的应用。 ... [详细]
  • Vim 编辑器功能强大,但其默认的配色方案往往不尽如人意,尤其是注释颜色为蓝色时,对眼睛极为不友好。为了提升编程体验,自定义配色方案显得尤为重要。通过合理调整颜色,不仅可以减轻视觉疲劳,还能显著提高编码效率和兴趣。 ... [详细]
  • 在 Mac 上查看隐藏文件和文件夹的详细指南。通过终端命令,您可以轻松地显示或隐藏这些文件。具体步骤如下:输入 `defaults write com.apple.finder AppleShowAllFiles -bool true` 以显示所有隐藏文件,或使用 `defaults write com.apple.finder AppleShowAllFiles -bool false` 以重新隐藏它们。此方法适用于各种版本的 macOS,帮助用户更好地管理和访问系统文件。 ... [详细]
  • 使用Jsoup解析并遍历HTML文档时,该库能够高效地生成一个清晰、规范的解析树,即使源HTML文档存在格式问题。Jsoup具备强大的容错能力,能够处理多种异常情况,如未闭合的标签等,确保解析结果的准确性和完整性。 ... [详细]
  • 装饰者模式(Decorator):一种灵活的对象结构设计模式
    装饰者模式(Decorator)是一种灵活的对象结构设计模式,旨在为单个对象动态地添加功能,而无需修改原有类的结构。通过封装对象并提供额外的行为,装饰者模式比传统的继承方式更加灵活和可扩展。例如,可以在运行时为特定对象添加边框或滚动条等特性,而不会影响其他对象。这种模式特别适用于需要在不同情况下动态组合功能的场景。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • 二分查找算法详解与应用分析:本文深入探讨了二分查找算法的实现细节及其在实际问题中的应用。通过定义 `binary_search` 函数,详细介绍了算法的逻辑流程,包括初始化上下界、循环条件以及中间值的计算方法。此外,还讨论了该算法的时间复杂度和空间复杂度,并提供了多个应用场景示例,帮助读者更好地理解和掌握这一高效查找技术。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • 蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践
    蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践 ... [详细]
author-avatar
nancy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有