這篇文章和你看到的其他的可能有出入,看完了可以去試試
這個問題網上很多帖子說到,隨便一搜就行。我今天說一下用Flask做後端,Vue做前端的一些經驗。
跨域出門左轉flask-CORS,別用JSONP,那個基本是一群技術宅hack出來的
前端請求
我這裡用的是vue-resource。以POST為例
this.$http.post(
this.url,
this.form,
{emulateJSON:true}
).then(function (res) {
console.log(res);
})
複製程式碼
這個{emulateJSON:true}
很多講vue-resource的部落格都說讓你加上,我的意見是呢,不加。
如果加了的話,header會有
Content-Type: application/x-www-form-urlencoded
Flask會把它作為正常表單處理,也就是鍵值對。這就有個問題,傳陣列等資料結構會很麻煩,因為表單會對陣列進行拆分傳輸,就不細說了,google一下很多。
不加這個,預設
Content-Type: application/json
Flask會處理為json資料,這樣子很多js陣列和物件都可以直接被解析成json,非常方便。
我估摸那些文章應該是SPA流行起來之前寫的
後端接收資料
這個地方就會涉及到用哪一個的問題。我的辦法比較蠢,開debug,用postman發請求,一個個看資料什麼樣。
所以我就發現了和網上文章有出入的地方。
首先,很多文章說values
可以訪問所有資料。沒錯,如果是post表單或者get的話。這也是前面很多人說使用{emulateJSON:true}
一個原因,不用糾結啊。
表單的資料同樣可以在form中訪問,具體有什麼區別我也忘了,估摸著應該是
values = args + form
我是寫程式碼突然想起來寫這篇文章的,懶得去測試了,如果有問題告訴我我改一下
當Content-Type: application/json
時,資料會全部被存放在json中,其他部分是空的。
相容的寫法
data = request.json.get('data') or request.values.get('data')
複製程式碼
總結一哈
args
: get引數
form
: post表單
values
: args + form
json
: json資料