存在这样的一种需求,通过页面点击给模型(如doc2vec)传入参数,模型调用后得到的结果再返回给页面,“每次调用”在这个过程中就涉及到一个叫做“页面等待时间”的问题,如果模型较大,每次调用之前的模型加载都会耗费很多时间,为了减少用户在页面的等待时长,可通过开启Django服务,使模型一直处于加载好的状态。
- 在python中安装django包
Pip install django
- 创建项目流程
(1)新建文件夹,如:
mkdir /home/hadoop/hellodjango
(2)进入文件夹所在路径:
cd /home/hadoop/hellodjango
(3)创建一个helloword的django项目
python /home/anaconda2/bin/django-admin.py startproject helloword
此时会自动生成2个文件:helloword文件夹以及manage.py。
其中helloword文件夹下有4个py文件:
__init__.py
settings.py
urls.py
wsgi.py
init.py:
__init__.py : 空文件,不用管。
Settings.py : 一些配置信息,只需要改ALLOWED_HOSTS = [] 为
ALLOWED_HOSTS = ['*'],允许所有用户访问
url.py :
**文件内容从**
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
**变成**
from django.conf.urls import url
from django.contrib import admin
from . import view
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', view.test)
]
我们建立一个view.py(名字可以随便起)文件,里面放上我们自己的代码,如:
from django.http import HttpResponse
from gensim.models.doc2vec import Doc2Vec
def test(request):
request.encoding = 'utf-8'
model = Doc2Vec.load("model_test.model")
return HttpResponse(model.docvecs.most_similar(request.GET['num1'], topn=10))
至此,脚本修改完毕。
- 然后需要启动服务
在/hellodjango/helloword路径下执行:
python manage.py runserver 0.0.0.0:18888
18888:随意赋予的一个端口号
即可启动服务。
以上为post和get请求共同的部分,以下为不一样的地方。
get请求:
在服务开启后,可通过浏览器传参页面返回结果的的方式测试是否成功:
在浏览器中访问:00.0.000.00:18888/?num1=&&&
00.0.000.00:相应的IP地址
18888:和启动服务时的端口号一致
&&&:要传递的参数
post请求:
view.py脚本在接收post请求的函数前需要加上csrf_exempt装饰器,即:post请求加csrf_exempt装饰器的原因
from django.views.decorators.csrf import csrf_exempt
# Create your views here.
@csrf_exempt
且测试的时候不能在url页面传参,要下载Postman客户端。Postman客户端下载百度网盘链接和提取码。要是没有币值,我qq发给你:2690382987