背景
本次項目中,使用了vue+Django開發,但是沒有構建構建vue項目,使用的是輕量級的vue。因此在解決問題的時候遇到了很多問題,如跨域、網站解析,解決起來比工程項目麻煩。
一、問題
由於沒有使用vue整套的解決方案,因此在進行ajax或者是其他請求的時候,需要自己手動完成,因此記錄一下自己遇到的問題。包括跨域的解決,重點在url的解析
二、解決辦法
2.1 跨域
由於我後端使用的是Django,因此使用corsheaders可以很好的解決問題,可以參考我在跨域問題中解決問題的blog,值得一提的是查看別人的blog,只有同域名下的內容可以訪問,給出圖片的鏈接地址。除此之外都涉及到跨域問題的解決。與此同時下面的幾個標籤不收跨域的影響。
<img src=XXX> # 圖片的地址
<link href=XXX> # css的文件資源
<script src=XXX> # js的腳本資源
2.2 解析
我使用的是Django做後端,但是在解析的時候遇到一些問題,由於傳入的數據是bytes,因此我們需要把數據進行轉碼,但是出現了一個問題就是無法解決下面出現的url,當然這跟我的請求方式有問題,我用的是post的請求方式。
name=%E9%98%BF%E6%96%AF%E8%92%82%E8%8A%AC
前段代碼,使用的是jQuery發送的Ajax的請求
// 使用jQuery發送請求的關鍵代碼,同時使用了vue.js
$.ajax({
url: globalurl + 'register/1.html',
type: 'post',
data: {email: this.email, password: this.Password},
contentType: 'application/json;charset=utf-8',
dataType: 'json',
success: function (message) {
alert("提交成功"+JSON.stringify(message));
},
error: function () {
alert("註冊失敗請重新嘗試!");
this.email = "";
this.Password = "";
this.RepeatPassword = "";
}
})
這樣的數據傳送到後端,就需要引入unquote進行解析,使用下面的指令安裝包
# 使用下面的指令安裝urllib庫
pip install urllib
使用以下的代碼,進行解析
from urllib.parse import unquote
def transform(str_param):
param = {i[0]: unquote(i[1]).encode('utf-8').decode('utf-8') for i in [i.split('=') for i in str_param.split('&')]}
return param
結果