1. 程式人生 > >Python Django 實現restful API

Python Django 實現restful API

最近在寫測試平臺,需要實現一個節點伺服器的api,正好在用django,準備使用djangorestframework外掛實現。
  • 需求

    實現一個介面,在呼叫時,通過傳遞的引數,直接執行對應專案的自動化測試

  • 環境

    Python3.6 ,PyCharm,W7

  • 專案結構
    這裡寫圖片描述

  • 功能實現

    • 流程
      處理流程
      我們要做的就是實現以上流程

    • 安裝
      pip install djangorestframework
      pip install markdown
      pip install django-filter # Filtering support

    • 配置

      INSTALLED_APPS = (
          ...
          'rest_framework',
      )
    • 編寫程式碼(本次程式碼不涉及資料庫操作,只簡單的寫一個api)

      ①:開啟AutoApi/Api/views.py 編寫如下程式碼

    from django.http import JsonResponse, HttpResponseNotAllowed, HttpResponse
    from django.views.decorators.csrf import csrf_exempt
    from rest_framework.parsers import JSONParser
    from rest_framework import
    status @csrf_exempt def run_job(request): # 判斷請求頭是否為json if request.content_type != 'application/json': # 如果不是的話,返回405 return HttpResponse('only support json data', status=status.HTTP_415_UNSUPPORTED_MEDIA_TYPE) # 判斷是否為post 請求 if request.method == 'POST': try
    : # 解析請求的json格式入參 data = JSONParser().parse(request) except Exception as why: print(why.args) else: content = {'msg': 'SUCCESS'} print(data) # 返回自定義請求內容content,200狀態碼 return JsonResponse(data=content, status=status.HTTP_200_OK) # 如果不是post 請求返回不支援的請求方法 return HttpResponseNotAllowed(permitted_methods=['POST'])

    ②:開啟AutoApi/Api/urls.py 編寫如下程式碼

    from django.conf.urls import url
    from Api import views
    
    urlpatterns = [
        url(r'^runJob/$',views.run_job),
    ]

    ③:開啟AutoApi/AutoApi/urls.py 修改如下程式碼

    ALLOWED_HOSTS = '*' # 修改為* 程式碼允許任意host
    
    
    from django.conf.urls import url,include
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^',include('Api.urls')),# 新增
    ]

    ④:啟動服務

     python manage.py runserver 0.0.0.0:8080
    

    這裡寫圖片描述

    ⑤:我們請求試試看

    這裡寫圖片描述

以上就是簡單的實現一個api ,其實開發說的介面就這麼簡單,沒有那麼神祕

接下來把post 的資料env ,project,cases 解析出來傳給對應的自動化測試入口函式,就可以實現通過介面請求,啟動自動化測試的目的。

後續

  • 實現介面呼叫自動化測試專案
  • 實現非同步介面
  • 實現定時任務
    .
    .
    .

以上就是最近一些工作的總結,加油!