基於django的rest api快速開發(只提供一個介面服務)
阿新 • • 發佈:2018-12-31
需求:目前我們有一個後臺的python指令碼和前臺的頁面,我們需要提供一個類似tomcat的服務,來使前臺的一個請求,通過我們搭建的服務去呼叫python模型,並最終將處理的結果返回給前臺。
一:搭建django rest api 環境首先我們需要有python環境,這是基礎,配置好python環境後就可以開始下面的操作了
# 建立虛擬環境資料夾mkdir tutorialcd tutorial# 建立虛擬環境(方便後期部署)並進入 需配置virtualenv環境
virtualenv env
linux:source env/bin/activate window:env\Scripts\activatedeactivate(退出虛擬環境)
# 安裝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 importHttpResponse 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',
)