背景
之前做 golang 開發的時候,用的是 beego 框架,框架的好處是,把所有工具都封裝好了,在獲取引數的時候,只要呼叫相應的方法,就能取得對應的資料。
而最近在從零開始,原生寫乙個**爬蟲管理的web服務功能時,發現自己所掌握的那點知識,並不能滿足自己的開發需求,測試好多遍都未果,希望寫下這篇記錄貼,供以後回顧。
資料提交場景大致如下:
1、表單提交,純粹的 form 表單提交資料;
2、表單上傳檔案,利用 form 表單上傳檔案;
3、ajax 提交 json 資料;
4、ajax 提交 表單資料;
5、ajax 上傳檔案;
下面我將對以上五種場景進行實際的示例展示,並採用 fetch api 代替 ajax 傳送請求。
示例示例1:html表單提交資料
action
=""method
="post"
>
type
="text"
name
="username"
placeholder
="username"
>
type
="text"
name
="password"
placeholder
="password"
>
type
="submit"
value
="submit"
>
form
>
r.parseform() // 首先解析表單
fmt.println("r.form : ", r.form)
fmt.println("r.form[\"username\"]", r.form["username"]) // 陣列索引方式獲取資料
fmt.println("r.form.get(\"password\")", r.form.get("password")) // get 方式獲取資料
r.form : map[debug:[1] password:[testpass] username:[test]]
r.form["username"] [test]
r.form.get("password") testpass
示例2:html表單上傳檔案
fmt.println("r.form : ", r.form)
file, filehandler, _ := r.formfile("file")
fmt.println("file header : ", filehandler.header)
fmt.println("filename : ", filehandler.filename)
b, _ :=ioutil.readall(file) // 讀取檔案內容
fmt.println(string(b))
r.form : map[debug:[1]]
filename : url.csv
示例3:ajax 提交json資料, golang 接收資料時,需要從request的body中,將資料讀出來
onclick
="test()"
>
testbutton
>
>
function
test()
),method:
"post"
, headers:})
.then
(response => response.
json()
).then
(data =>);
}script
>
json,_ := ioutil.readall(r.body)
fmt.println("got params: ", string(json))
fmt.println("echo request: ", r)
fmt.println("echo request header: ", r.header)
fmt.println("echo request body: ", r.body)
fmt.println("echo remote addr: ", r.remoteaddr)
fmt.println("echo host: ", r.host)
fmt.println("echo request method: ", r.method)
fmt.println("echo request ua: ", r.useragent())
got params:
echo request body: & true false false 0x706ce0}
echo remote addr: 127.0.0.1:61679
echo host: 127.0.0.1:8088
echo request method: post
示例4:ajax 提交表單資料
onclick
="test()"
>
testbutton
>
>
function
test()
}).then
(response => response.
json()
).then
(data =>);
}script
>
r.parsemultipartform(32 << 20)
fmt.println(r.form)
fmt.println("username: ", r.form.get("username"))
fmt.println("password: ", r.form.get("password"))
map[debug:[1] password:[test_password] username:[test]]
username: test
password: test_password
示例5:ajax 上傳檔案
type
="file"
name
="test_file"
id="test_file"
>
onclick
="test()"
>
testbutton
>
>
function
test()
}).then
(response => response.
json()
).then
(data =>);
}script
>
r.parseform()
file, filehandle, _ := r.formfile("test_file")
fmt.println(filehandle.header, filehandle.filename, filehandle.size)
b, _ := ioutil.readall(file)
fmt.println(string(b))
fmt.println("password: ", r.form.get("password"))
password: test_password
WEB框架之Django 實戰專案資訊獲取
from django.contrib import admin from django.urls import path from blog import views urlpatterns path admin admin.site.urls path userinfo views.userin...
golang實戰小練習
統計 某路徑下 某些指定檔案中 指定字串出現的次數 用到的外部庫 allfiletextnum 統計 某路徑下 某些指定檔案中 指定字串出現的次數 dir string 指定查詢路徑 sixs string 指定查詢的字尾 text string 指定統計字串 return 指定字串出現的次數 in...
golang呼叫python實戰
go python python提供了豐富的c api。而c和go又可以通過cgo無縫整合。所以,直接通過golang呼叫libpython,就可以實現go調python的功能了。但是過程比較複雜,而go python提供了針對cpython 2的c api提供了native binding能力,方...