需求:目前我们有一个后台的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 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',
)