1. 程式人生 > >基於django的rest api快速開發(只提供一個介面服務)

基於django的rest api快速開發(只提供一個介面服務)

需求:目前我們有一個後臺的python指令碼和前臺的頁面,我們需要提供一個類似tomcat的服務,來使前臺的一個請求,通過我們搭建的服務去呼叫python模型,並最終將處理的結果返回給前臺。

一:搭建django rest api 環境

首先我們需要有python環境,這是基礎,配置好python環境後就可以開始下面的操作了

# 建立虛擬環境資料夾mkdir tutorialcd tutorial# 建立虛擬環境(方便後期部署)並進入  需配置virtualenv環境

virtualenv env

linux:source env/bin/activate window:env\Scripts\activate

deactivate(退出虛擬環境)

# 安裝Django和restframework框架pip install django

pip install djangorestframework

# 建立一個專案並進入專案建立appdjango-admin.py startproject tutorial  cd tutorial

django-admin.py startapp snippets

到此我們的服務搭建完成,我們的目錄是這樣的

然後我們開始我們的工作

1: 設定settings,將rest介面和app加入INSTALLED_apps中

2:編寫turorial的urls.py

from django.conf.urls import url, include

urlpatterns = [
    url(r'^', include('snippets.urls')),
]

3:在app snippets新建一個urls.py檔案並加入以下內容

from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from snippets import views

urlpatterns = [
    url(r'^snippets$', views.test1),
]

urlpatterns = format_suffix_patterns(urlpatterns):4

4:編寫app snippets的view檔案

from django.shortcuts import 
HttpResponse from django.views.decorators.csrf import csrf_exempt # 配置頁面的快取 from search.search import Search import os import time s_app = Search() corpus = s_app.read_corpus() s_app.train(corpus) @csrf_exempt # @cache_page(60*15) def test1(request): """ List all code snippets, or create a new snippet. """ request.body.decode('utf-8') global s_app try: searchStr = str(request.GET.get('searchStr')) type = int(request.GET.get('type')) count = int(request.GET.get('count')) js = s_app.search(searchStr, topK=count, by=0, type=type) except Exception as e: js = "[{'info':" + e.__doc__ + "}]" return HttpResponse(js, content_type='application/json;charset=utf-8');

至此,我們的一個基於django rest api框架搭建的簡單服務就完成了

最後我們只需要跑起服務就行了

python manane.py runserver 0.0.0.0:port

http://localhost:5600/snippets?searchStr=a&type=1&count=3

跨域問題解決方式

1.安裝django-cors-headers

pip install django-cors-headers
  • 1

2.配置settings.py檔案

INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
 ] 

MIDDLEWARE_CLASSES = (
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware', # 注意順序
    ...
)
#跨域增加忽略
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
    '*'
)

CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
    'VIEW',
)

CORS_ALLOW_HEADERS = (
    'XMLHttpRequest',
    'X_FILENAME',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
    'Pragma',
)