CentOS部署基于python的RESTful API

背景:在服務(wù)器部署api供前端調(diào)用在業(yè)界是一種非常常見的做法掸驱×樵伲基于RESTful API的方式簡(jiǎn)單清晰笼蛛,很好的前后端分離實(shí)踐。
相關(guān)軟件版本:

服務(wù)器是CentOS 6.8 加 nginx顾画,python 是自帶的2.6.6,有點(diǎn)低匆笤,不過不影響就不升級(jí)了研侣。

安裝Flask

安裝virtualenv:
sudo pip install virtualenv
【或者:sudo apt-get install python-virtualenv
【注:virtualenv 是什么?當(dāng)我們有很多項(xiàng)目且項(xiàng)目要求不同版本的python時(shí)炮捧,Virtualenv 能夠?yàn)槊總€(gè)項(xiàng)目安裝一套 Python庶诡,實(shí)現(xiàn)多套 Python 并存。但它不是真正地安裝多套獨(dú)立的 Python 拷貝咆课,而是讓不同的項(xiàng)目處于各自獨(dú)立的環(huán)境中末誓。virtualenv xxx 就是給 xxx 目錄建立一個(gè)獨(dú)立的環(huán)境】
創(chuàng)建環(huán)境:
mkdir aidraw_api
virtualenv aidraw_api
在 virtualenv 中安裝 Flask:
sudo pip install Flask
寫一個(gè) python 腳本:
python ./app_new.py
這個(gè)時(shí)候顯示 “* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)”

#!flask/bin/python
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "Hello, World!"

if __name__ == '__main__':
    app.run(host='0.0.0.0')

測(cè)試一下:
curl http://localhost:5000/
顯示 “...... "GET / HTTP/1.1" 200 ”,done书蚪!
這時(shí)候發(fā)現(xiàn)一個(gè)問題喇澡,不是 api 肯定要供外網(wǎng)訪問的,根據(jù) Flask 的文檔殊校,app.run(host='0.0.0.0') 就是供外網(wǎng)訪問的設(shè)置撩幽。但似乎不行。不虛,我們還有 nginx窜醉!在 /etc/nginx/conf.d 新建一個(gè) server:


server {
    listen       80;
    server_name  api.xxx.cn;

    location / {
        root xxx;
        proxy_pass http://127.0.0.1:5000;
    }

    error_page   500 502 503 504  /50x.html;
}

這獸宪萄,瀏覽器敲下 api.xxx.cn,看到“hello world榨惰!”拜英,done!

實(shí)戰(zhàn)

目標(biāo):通過一個(gè)圖片 id琅催,將圖片保存至本地居凶。

#!flask/bin/python
from flask import Flask, jsonify, request
import urllib2

app = Flask(__name__)

@app.route('/')
def index():
    return "this is a server_name for api."

@app.route('/xxx/v1.0/pic_id', methods=['POST'])
def post_pic_id():
    if not request.json or not 'pic_id' in request.json:
        abort(400)
    pic_id_str = "http://xxx/input/" + request.json['pic_id'] + ".jpeg"
    pic_path = "/home/xxx/" + request.json['pic_id'] + ".jpeg"
    f = open(pic_path,'wb')
    data = urllib2.urlopen(pic_id_str)
    f.write(data.read())
    f.close()
    return pic_id_str, 200

if __name__ == '__main__':
    app.run(host='0.0.0.0')

curl -i -H "Content-Type: application/json" -X POST -d '{"pic_id":"00000000000021euAlQpm1RP92f-txh_bcrMCaKKJxCuBrzoJTXi8VG_LD5nF30e9kMAMF-F8cs8W"}' http://xxx/v1.0/pic_id
打開 /home/xxx/ 發(fā)現(xiàn)圖片已下載至本地,done藤抡!
【附:urllib 和 urllib2 的區(qū)別
urllib 和 urllib2 都是接受 URL 請(qǐng)求的相關(guān)模塊侠碧,但是 urllib2 可以接受一個(gè) Request 類的實(shí)例來設(shè)置 URL 請(qǐng)求的 headers,urllib 僅可以接受 URL缠黍。這意味著弄兜,你不可以偽裝你的 User Agent 字符串等。urllib 提供 urlencode 方法用來GET查詢字符串的產(chǎn)生瓷式,而urllib2 沒有替饿。這是為何 urllib 常和 urllib2 一起使用的原因。目前的大部分 http 請(qǐng)求都是通過 urllib2 來訪問的】

結(jié)語(yǔ)

搭好環(huán)境贸典,開始愉快的開發(fā) api 接口吧视卢!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市廊驼,隨后出現(xiàn)的幾起案子据过,更是在濱河造成了極大的恐慌,老刑警劉巖妒挎,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝶俱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡饥漫,警方通過查閱死者的電腦和手機(jī)榨呆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庸队,“玉大人积蜻,你說我怎么就攤上這事〕瓜” “怎么了竿拆?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)宾尚。 經(jīng)常有香客問我丙笋,道長(zhǎng)谢澈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任御板,我火速辦了婚禮锥忿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怠肋。我一直安慰自己敬鬓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布笙各。 她就那樣靜靜地躺著钉答,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杈抢。 梳的紋絲不亂的頭發(fā)上数尿,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音惶楼,去河邊找鬼右蹦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鲫懒,可吹牛的內(nèi)容都是我干的嫩实。 我是一名探鬼主播刽辙,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼窥岩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了宰缤?” 一聲冷哼從身側(cè)響起颂翼,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎慨灭,沒想到半個(gè)月后朦乏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氧骤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年呻疹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筹陵。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刽锤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出朦佩,到底是詐尸還是另有隱情并思,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布语稠,位于F島的核電站宋彼,受9級(jí)特大地震影響弄砍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜输涕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一音婶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧占贫,春花似錦桃熄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至厢汹,卻和暖如春螟深,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烫葬。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工界弧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搭综。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓垢箕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親兑巾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子条获,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,443評(píng)論 6 428
  • 學(xué)習(xí) Flask,寫完一個(gè) Flask 應(yīng)用需要部署的時(shí)候蒋歌,就想著折騰自己的服務(wù)器帅掘。根據(jù)搜索的教程照做,對(duì)于原理一...
    Cocoa_Coder閱讀 17,096評(píng)論 4 56
  • GitHub 上有一個(gè) Awesome - XXX 系列的資源整理,資源非常豐富堂油,涉及面非常廣修档。awesome-p...
    若與閱讀 18,615評(píng)論 4 418
  • 因?yàn)槔牙训臋C(jī)緣,我混進(jìn)了就這樣一起學(xué)習(xí)小組府框。昨天起床以后就出發(fā)前往通州陸航研究所的羽球館吱窝,打羽毛球去囖~ 路上花了...
    森和閱讀 466評(píng)論 0 0
  • 關(guān)于存儲(chǔ)父母為聯(lián)系人的問題 記得上個(gè)月體育課有一個(gè)非常純真活潑的小姑娘說,她存父母為“爸爸”“媽媽”迫靖,是希望如果自...
    Aros閱讀 515評(píng)論 5 2