在centos linux下用django搭建web服务,提供api对句子进行情感分析

在centos linux下搭建web服务

这两天因为实验室和小米的项目需要我搭建一个web服务返回产品评论的情感极性概率,我一个服务器小白只好从零摸索搭建服务器,遇到了很多无从下手的问题,计算机真的令人崩溃2333,写个博客记录一下。

使用到的工具:

python 3.6.5
django框架

步骤:

1.首先把情感分析的源码调整为对方需要的测试方案,即输入一个句子,分别输出这个句子消极和积极的情感极性概率

这里写图片描述
2.链接实验室的服务器,安装django,用pip install django即可,然后创建django项目lrt233

django-admin startproject lrt233

3.在创建好的文件夹中把本地的情感分析源码文件夹复制进lrt233项目下的lrt233文件夹中

这里写图片描述
4.如下图,SentimentAnaly文件夹中就是情感分析的源码
这里写图片描述
5.接下来需要修改创建的django的文件,为了允许外网访问,要修改setting.py文件中的,如果不修改的话只能本地访问,即只能用实验室服务器通过127.0.0.1这个指向本地的ip访问服务

#setting.py
把
ALLOWED_HOSTS = [']
修改成
ALLOWED_HOSTS = ['*']

6.接下来修改urls.py中的内容,需要增加一些import,比如import项目中的view.py文件,然后为了能够使用服务,增加了两个url的匹配,第一个匹配是如果不输入任何路径的话就输出调用view.hello,用作测试,第二个匹配是调用情感分析接口。

#urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from . import view

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^$', view.hello),
      url(r'^hello/$', view.SentimentAnalysis),
]

7.然后就是对应的修改view.py的内容,分别写好需要调用的两个函数,我们要调用的情感分析接口中,not_first_use_function(sentence)用于调用源码的测试接口,request.GET.get(‘sentence’, ‘lrt is cute’)用于得到urls中输入的值。这里还要注意,需要import用到的not_first_use_function接口。

from django.http import HttpResponse

from lrt233.SentimentAnalysis.run import not_first_use_function


def hello(request):
    return HttpResponse("Hello world ! ")


def SentimentAnalysis(request):

    sentence = request.GET.get('sentence', 'lrt is cute')
   # print('sentence is : ' , sentence)
    ret = not_first_use_function(sentence)
    #print("ret is : " , ret)
    return HttpResponse(ret)

8.写好后,保存一下,在这个路径中执行命令得到下面的结果则服务已经跑起来了

python manage.py runserver 111.6.102.183660

这里写图片描述

9.服务器运行起来后,在另外的电脑上访问本服务,只需要在浏览器输入url即可。hello函数用于测试,结果如下,url=111.6.102.18:3660/时输出hello world!
这里写图片描述

10.SentimentAnalysis函数则是用到的api接口,结果如下,url为:http://111.6.102.18:3660/hello/?sentence=我太喜欢这个手机了,必须好评
输出为对句子的情感分析结果。
这里写图片描述
就大功告成了!

遇到的令人绝望的bug以及解决方法

1.首先是源码的bug,这次主要是一些路径问题,比较好解决,我强行改成了linux下的绝对路径。
2.我遇到的第一个令人绝望的问题是只能本地访问服务,而不能外地访问,一开始走进了死胡同,以为是django代码的问题,毕竟小白。。。老是怀疑自己的代码有问题。后来是学长在用flask搭建服务器也遇到这个问题然后告诉我是端口没有开放的原因,然后我就去查怎么开放端口啦,一开始查到这个

LINUX通过下面的命令可以开启允许对外访问的网络端口: 

/sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCEPT #开启8000端口 

/etc/rc.d/init.d/iptables save #保存配置 

/etc/rc.d/init.d/iptables restart #重启服务 

查看端口是否已经开放 

/etc/init.d/iptables status 

但试了之后发现实验室的centos服务器用的不是iptables防火墙,而是firewalld防火墙,所以这些命令没用,然后就查到了这个,这三条命令顺利执行了,然后就可以外网访问服务器了

那怎么开启一个端口呢
添加
firewall-cmd --zone=public --add-port=80/tcp --permanent    --permanent永久生效,没有此参数重启后失效)
重新载入
firewall-cmd --reload
查看
firewall-cmd --zone= public --query-port=80/tcp

3.另外,一开始因为不能用外网访问,我首先想到的是在linux下本地调试,然后下载了links浏览器,但实验室的服务器没有图形化桌面,又不敢随便装,所以只能用命令行使用浏览器,这导致了在links 111.6.102.18:3660/?sentence=xxx的时候,不知道什么原因,终端没有任何信息出现,这导致了我卡进死胡同很久,不知道是不是linux系统的原因。
然后在可以外网访问后,我使用windows的浏览器访问,浏览器就给我提供了一些bug信息,并且在linux终端也出现了很多bug信息,之后就顺利解决了bug。
总之,万恶的命令行。

总结

最后发现bug其实很简单,但自己当时就是容易走死胡同呢。。。。计算机真玄学

猜你喜欢

转载自blog.csdn.net/lrt366/article/details/81841458