zoukankan      html  css  js  c++  java
  • python-django rest framework框架

    1.API 接口  是什么,干什么用的?

                API简单的来说就是一个url
           - http://www.oldboyedu.com/get_user/ - http://www.oldboyedu.com/get_users/ 两个用途: - 为别人提供服务 - 前后端分离
                  为什么要做前后端分离:
                      解耦
                      把前端分离出来,可以用前端框架,开发起来非常快
                      一个后端程序可以给多个客户端服务       

    2. restful是什么

                - 表征状态转移
                - 面向资源编程,对互联网上的任意东西都视为资源。
                    - http://www.oldboyedu.com/get_user/
                    - http://www.oldboyedu.com/get_img/1.png

    3.普通的api与 restful api 的区别

    普通API:  接口太多
        姑娘列表:
            http://www.oldboyedu.com/get_girls/
            http://www.oldboyedu.com/add_girl/
            http://www.oldboyedu.com/del_girl/1/
            http://www.oldboyedu.com/update_girl/1/
        
    restful api:
        姑娘列表:
            http://www.oldboyedu.com/girls/
            GET: 获取
            POST: 添加
            PUT: 更新
            DELETE:删除

    4. restful api 规范:  对请求有一个约定 ,遵循更好,不遵循也能用

        - URL
            api.sssss.com   有跨域的问题,因为不同源
            http://www.sssss.com/api
        - url名词
        视网络上任何东西都是资源,均使用名词表示(可复数)
      •   https://api.example.com/v1/zoos
      •   https://api.example.com/v1/animals
      •   https://api.example.com/v1/employees
    - 版本 : 版本更新  http://www.sssss.com/api/v1/
        - 提交方式
            通过请求方式来判断你要做的操作
            method :
                GET      :从服务器取出资源(一项或多项)
                POST    :在服务器新建一个资源
                PUT      :在服务器更新资源(客户端提供改变后的完整资源)
                #PATCH  :在服务器更新资源(客户端提供改变的属性)
                DELETE :从服务器删除资源
        - status : 不同的状态码代表着不同的意思
                    部分成功可以用 code来操作:  1001 成功,1002部分成功,1003 全部失败
        - Hypermedia link :看情况而定。可以直接返回json数据,也可以返回 一个url  ,让前端再次放送请求查看具体的信息
        - 错误详细 : 要返回给前端
    
    OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
    CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
    Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
    NO CONTENT - [DELETE]:用户删除数据成功。
    INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
    Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
    Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
    NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
    Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
    Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
    Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
    INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
    
    更多看这里:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
    常用状态码

    5. restful api 的两种方式

        方式一:
            http://www.oldboyedu.com/girls/
            GET: 获取
            POST: 添加
            PUT: 更新
            DELETE:删除
    
        方式二:
            http://www.oldboyedu.com/girls/
                - 姑娘列表
            http://www.oldboyedu.com/girl/1/
                - 单独一个

    6.基于Django做API
        - FBV

    ---urls
    from django.conf.urls import url
    from app01 import views
    urlpatterns = [
        url(r'^users/', views.users),
        url(r'^user/(d+)', views.user),
    ]
    
    
    ---views
    from django.shortcuts import render,HttpResponse
    import json
    
    def users(request):
        response = {'code':1000,'data':None}
        response['data'] = [
            {'name':'盛松','age':19},
            {'name':'鲁宁','age':20},
            {'name':'解析博','age':5},
        ]
        return HttpResponse(json.dumps(response),status=200)
    
    def user(request,pk):
        if request.method == "GET":
            return HttpResponse(json.dumps({'name':'盛松','age':19}))
        elif request.method == "POST":
            return HttpResponse(json.dumps({'code':1111}))
        elif request.method == "PUT":
            pass
        elif request.method == "DELETE":
            pass
    View Code

        - CBV
            至于为什么不直接用原始的django CBV做api,就是因为它的dispatch方法功能太少了,许多功能需要自己开发。

    ---urls
    urlpatterns = [
        url(r'^users', Users.as_view()),
    ]
    
    ---views
    from django.views import View
    from django.http import JsonResponse
     
    class Users(View):
        def get(self, request, *args, **kwargs):
            result = {
                'status': True,
                'data': 'response data'
            }
            return JsonResponse(result, status=200)
     
        def post(self, request, *args, **kwargs):
            result = {
                'status': True,
                'data': 'response data'
            }
            return JsonResponse(result, status=200) 
    View Code
  • 相关阅读:
    ASP.NET Forums 2.0 修改集锦(一)
    在自己的应用程序中显示Windows关于对话框
    ASP.NET Forums 2.0 本地化修改(四)
    Flash对双字节的支持问题
    DotNetNuke 2.1.2安装指南
    ASP.NET Forums 2.0 本地化修改(五) 增加页面Meta标记的keywords和description
    ASP.NET Forums 2.0 本地化修改(三)
    JavaScript利用正则表达式自己写数字判断函数
    hash表基础知识(转载)
    求子数组的最大和
  • 原文地址:https://www.cnblogs.com/liuwei0824/p/8417915.html
Copyright © 2011-2022 走看看