成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從頭完成一個restful API 服務

開發 前端
為了方便測試,我們這里寫了一個簡單的測試 web server,用來在網頁上向 API 服務器發請求。代碼很簡單,還是用 flask 來啟動 server,返回一個頁面。

上次我們一起完成了一個初級的API服務器的搭建,今天來給它增加點新功能,要看前面內容的,??戳這里??

1.完善設計

在上次的設計當中,我們定義了三張表,AdminUser,用來作為調用 API 鑒權用戶,User,用來作為存儲普通用戶使用,Picture,用來作為存儲用戶上傳的圖片。但是當時只是實現了 AdminUser 的相關功能,而 User 和 Picture 還沒有真正的關聯起來,這次就把它們完善起來

2.測試 server

為了方便測試,我們這里寫了一個簡單的測試 web server,用來在網頁上向 API 服務器發請求。代碼很簡單,還是用 flask 來啟動 server,返回一個頁面。

@app.route('/jsupload', methods=['POST', 'GET'])
def jsupload():
return render_template('js_upload.html')

而返回的這個頁面也很簡單,包含一個 form,用來提交數據的。

<form id= "uploadForm">
<p >指定用戶名: <input type="text" name="filename" value= "" id="UID"/></p>
<p >上傳文件: <input type="file" name="file" id="PID"/></p>
<input type="button" value="上傳" onclick="upload()" />
</form>

服務起來之后大概是這樣的

圖片

不要嫌棄它丑,功能夠了就行了。

這樣一個簡單的測試server就好了。

3.前端代碼

前端代碼使用 Ajax 來提交數據和回顯數據

<script type="text/javascript">
function upload(){
//var formData = new FormData($( "#uploadForm" )[0]);
var img_file = document.getElementById("PID");
var fileObj = img_file.files[0];
var formData = new FormData();
formData.append("UID", $("#UID").val());
formData.append("PID", fileObj);

$.ajax({
method: "POST",
url: "http://127.0.0.1:9980/api/test",
timeout: 10000,
data: formData,
async: false,
headers: {"client-type":"platform",},
dataType: "json",
contentType:false,
processData:false,//數據不做預處理
success: function(res) {
return;
},
error: function(e){
alert(e.msg);

}
}).done(function(res){
var result = '';
var result1 = '';
result += '<img src="' + res['p_url'] + '" width="100">';
$('#result').html(result);
}
);
}

</script>

代碼都是比較基礎的,定位元素,調用函數,說下這里的 url,那個就是我在本地啟動的 API server 的地址嘍。同時這里還在監聽服務器的返回,獲取到返回的 p_url,來顯示圖片。

4. 后端代碼

首先判斷下前端傳的是否是圖片文件,如果不是直接返回錯誤

if 'PID' not in request.files:
return jsonify({'code': -1, 'filename': '', 'msg': 'please select one picture to upload'})

如果判斷通過,就獲取圖片和用戶名稱

user = request.form.get('UID')
f = request.files['PID']

然后在本地創建目錄用于保存圖片,并且著手處理 User 和 Picture 的關系

basepwd = os.getcwd()
pwd = os.path.join(basepwd, r'app')
tmp_path = os.path.join(pwd, r'static/%s' % user)
new_filename = str(time.time()) + '.' + f.filename.split('.')[1]
if not os.path.exists(tmp_path):
os.makedirs(tmp_path)
upload_path = os.path.join(tmp_path, secure_filename(new_filename))
f.save(upload_path)
if User.query.filter_by(username=user).first():
u = User.query.filter_by(username=user).first()
u.picture_count += 1
p = Picture(picture_name=user, picture=upload_path, picture_id=u.id)
db.session.add(u)
db.session.add(p)
db.session.commit()

如果不存在目錄則創建,并且保存圖片。如果用戶存在于數據庫中,那么 picture_count 加1,同時更新 Picture 表,關聯 picture_id 為 user_id。

如果用戶不存在,那么先插入用戶,提交,然后再更新 Picture 表

newu = User(username=user)
db.session.add(newu)
db.session.commit()
newp = Picture(picture_name=user, picture=upload_path, picture_id=newu.id)
db.session.add(newp)
db.session.commit()

最后API返回p_url用于前端web展示

return jsonify({"p_url": 'http://127.0.0.1:9980/static/%s/' % user + new_filename})

5. 最終效果

最后的效果如下

圖片

同時在項目的 static 目錄下,會產生每個用戶的圖片,因為圖片的命名都使用了 time.time(),也就不存在重名覆蓋的問題啦

圖片

6. 任重道遠

這次的完善就到這里了,不過程序還是有很多問題的,比如已知的問題就有如果在web端不填寫名字或者不選擇圖片,都會產生一些問題;同時還可以增加一些接口,比如獲取用戶所有圖片等待,這些都留到后面再說吧

還有個嚴峻的問題,就是每次本地調測好之后,都要手動同步代碼到遠程服務器,非常之麻煩,雖然目前項目很小,但是 CI 還是很有必要的,后面就來聊聊怎么結合 GitHub 做持續集成吧

完整代碼看這里: https://github.com/zhouwei713/mini_api

責任編輯:武曉燕 來源: 蘿卜大雜燴
相關推薦

2022-10-08 00:00:00

AdminUser數據庫鑒權

2022-02-22 11:57:32

BOAWeb服務器

2024-06-13 08:36:11

2015-10-19 17:38:01

AnsibleDocker應用部署

2022-11-14 08:01:48

2024-08-15 14:48:57

2020-08-27 11:39:05

JavaRESTful Web編程語言

2017-10-16 12:52:51

2022-02-10 23:02:25

Go序列化Post

2024-09-03 08:24:52

RestfulAPI結構

2020-07-03 10:21:48

Go框架Docker

2018-09-08 08:41:21

Python 3API框架API Star

2020-08-14 10:01:25

編程神經網絡C語言

2013-07-01 11:01:22

API設計API

2023-04-10 14:20:47

ChatGPTRESTAPI

2015-06-24 16:09:54

Easy Connec深信服

2013-06-13 09:21:31

RESTful APIRESTfulAPI

2024-01-02 13:58:04

GoREST API語言

2020-10-29 16:00:03

Node.jsweb前端

2020-09-22 07:50:23

API接口業務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久中文字幕视频 | 成人精品毛片 | 日韩国产精品一区二区三区 | 久久久久国产 | 欧美九九九 | 欧美精品在线一区二区三区 | 91亚洲视频在线 | 欧美一级三级 | av一级| 欧美国产视频 | 国产精品日韩一区二区 | 精品视频一区二区在线观看 | 亚洲视频三区 | 天天色天天色 | 日韩毛片免费视频 | 在线一区 | 久久久久久久电影 | 中文在线观看视频 | 亚洲综合久久精品 | 中文字幕第一页在线 | 伊人网站在线 | 久久久青草婷婷精品综合日韩 | 亚洲精品久久久久久久久久久 | 玖草资源 | 久草成人 | 亚洲午夜小视频 | 日韩精品成人一区二区三区视频 | 国产精品我不卡 | 亚洲欧美国产毛片在线 | 国产精品美女久久久久aⅴ国产馆 | 亚洲一视频 | 欧美婷婷 | 涩涩操 | 一区二区三区不卡视频 | 精品亚洲一区二区 | 久久国产精品99久久久久久丝袜 | 国产在线1 | 久久这里只有精品首页 | 狠狠操狠狠操 | 黄色免费网址大全 | 国产成人av免费看 |