1. 程式人生 > >在centos linux下用django搭建web服務,提供api對句子進行情感分析

在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其實很簡單,但自己當時就是容易走死衚衕呢。。。。計算機真玄學