精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Golang GinWeb框架4-請(qǐng)求參數(shù)綁定和驗(yàn)證

開(kāi)發(fā) 前端
本文接著上文(Golang GinWeb框架3-自定義日志格式和輸出方式/啟禁日志顏色)繼續(xù)探索GinWeb框架

 簡(jiǎn)介

本文接著上文(Golang GinWeb框架3-自定義日志格式和輸出方式/啟禁日志顏色)繼續(xù)探索GinWeb框架


模型綁定和驗(yàn)證

使用模型綁定來(lái)綁定請(qǐng)求體到一個(gè)Go類(lèi)型上. 目前支持JSON,XML,YAML以及標(biāo)準(zhǔn)表單(如foo=bar&boo=baz)的綁定.

Gin使用go-playground/validator/v10包來(lái)驗(yàn)證請(qǐng)求, 關(guān)于tags在驗(yàn)證中使用詳見(jiàn)(https://godoc.org/github.com/go-playground/validator#hdr-Baked_In_Validators_and_Tags)

注意:綁定前請(qǐng)確認(rèn)結(jié)構(gòu)體中需要綁定的字段標(biāo)簽與綁定類(lèi)型一致,比如綁定JSON,設(shè)置標(biāo)簽: json:"fieldname"

Gin提供兩種方式(類(lèi)型)來(lái)完成綁定:

Must bind

1. 方法: Bind, BindJSON, BindXML, BindQuery, BindYAML, BindHeader

2. 特點(diǎn): 這些方法底層使用MustBindWith方法. 如果出現(xiàn)綁定錯(cuò)誤, 請(qǐng)求將以狀態(tài)碼400返回失敗信息:c.AbortWithError(400, err).SetType(ErrorTypeBind), 響應(yīng)中設(shè)置Content-Type頭為text/plain; charset=utf-8.如果手動(dòng)設(shè)置響應(yīng)碼,會(huì)警告響應(yīng)頭已經(jīng)設(shè)置,比如提示: [GIN-debug] [WARNING] Headers were already written. Wanted to override status code 400 with 422, 如果想要更好的控制這些行為,建議使用下面對(duì)應(yīng)的ShoudBind方法.

Should bind

1. 方法: ShouldBind, ShouldBindJSON, ShouldBindXML, ShouldBindQuery, ShouldBindYAML, ShouldBindHeader

2. 特點(diǎn): 這些方法底層使用ShouldBindWith. 如果出現(xiàn)綁定錯(cuò)誤, 會(huì)返回錯(cuò)誤, 開(kāi)發(fā)者可以控制和恰當(dāng)?shù)奶幚磉@些錯(cuò)誤.

當(dāng)使用綁定方法時(shí), Gin嘗試根據(jù)類(lèi)型頭Content-Type header自動(dòng)推斷要使用的綁定器. 如果你已經(jīng)確認(rèn)需要綁定的類(lèi)型,可以直接使用底層的MustBindWith或ShouldBindWith方法.

你也可以針對(duì)特殊的字段指定required標(biāo)簽值, 如果某個(gè)字段指定了:binding:"required"標(biāo)簽, 但是在綁定時(shí)該字段為空會(huì)返回錯(cuò)誤.

如以下代碼綁定JSON:

  1. package main 
  2.  
  3. import ( 
  4.   "github.com/gin-gonic/gin" 
  5.   "net/http" 
  6.  
  7. // Binding from JSON 
  8. type Login struct { 
  9.   User string `form:"user" json:"user" xml:"user"  binding:"required"` //分別定義form,json,xml,binding等標(biāo)簽 
  10.   //Password string `form:"password" json:"password" xml:"password" binding:"required"
  11.   Password string `form:"password" json:"password" xml:"password" binding:"-"
  12.  
  13. func main() { 
  14.   router := gin.Default() 
  15.  
  16.   // Example for binding JSON ({"user""manu""password""123"}) 
  17.   router.POST("/loginJSON", func(c *gin.Context) { 
  18.     var json Login 
  19.     if err := c.ShouldBindJSON(&json); err != nil { 
  20.       c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) 
  21.       return 
  22.     } 
  23.  
  24.     if json.User != "manu" || json.Password != "123" { 
  25.       c.JSON(http.StatusUnauthorized, gin.H{"status""unauthorized"}) 
  26.       return 
  27.     } 
  28.  
  29.     c.JSON(http.StatusOK, gin.H{"status""you are logged in"}) 
  30.   }) 
  31.  
  32.   // Example for binding XML ( 
  33.   //  <?xml version="1.0" encoding="UTF-8"?> 
  34.   //  <root> 
  35.   //    <user>user</user
  36.   //    <password>123</password
  37.   //  </root>) 
  38.   router.POST("/loginXML", func(c *gin.Context) { 
  39.     var xml Login 
  40.     if err := c.ShouldBindXML(&xml); err != nil { 
  41.       c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) 
  42.       return 
  43.     } 
  44.  
  45.     if xml.User != "manu" || xml.Password != "123" { 
  46.       c.JSON(http.StatusUnauthorized, gin.H{"status""unauthorized"}) 
  47.       return 
  48.     } 
  49.  
  50.     c.JSON(http.StatusOK, gin.H{"status""you are logged in"}) 
  51.   }) 
  52.  
  53.   // Example for binding a HTML form (user=manu&password=123) 
  54.   router.POST("/loginForm", func(c *gin.Context) { 
  55.     var form Login 
  56.     // This will infer what binder to use depending on the content-type header. 
  57.     if err := c.ShouldBind(&form); err != nil { 
  58.       c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) 
  59.       return 
  60.     } 
  61.  
  62.     if form.User != "manu" || form.Password != "123" { 
  63.       c.JSON(http.StatusUnauthorized, gin.H{"status""unauthorized"}) 
  64.       return 
  65.     } 
  66.  
  67.     c.JSON(http.StatusOK, gin.H{"status""you are logged in"}) 
  68.   }) 
  69.  
  70.   // Listen and serve on 0.0.0.0:8080 
  71.   router.Run(":8080"
  72.  
  73. //模擬請(qǐng)求: curl -v -X POST http://localhost:8080/loginJSON -H 'content-type: application/json' -d '{ "user": "manu", "password": "123" }' 

跳過(guò)驗(yàn)證: 與binding:"required"標(biāo)簽對(duì)應(yīng)的是binding:"-", 表示該字段不做綁定, 所以綁定時(shí)該字段為空不會(huì)報(bào)錯(cuò).

自定義驗(yàn)證器

你也可以自己注冊(cè)一個(gè)自定義驗(yàn)證器, 示例代碼請(qǐng)參考(https://github.com/gin-gonic/examples/blob/master/custom-validation/server.go)

  1. package main 
  2.  
  3. import ( 
  4.   "net/http" 
  5.   "time" 
  6.  
  7.   "github.com/gin-gonic/gin" 
  8.   "github.com/gin-gonic/gin/binding" 
  9.   "github.com/go-playground/validator/v10" 
  10.  
  11. // Booking contains binded and validated data. 
  12. // Booking結(jié)構(gòu)中定義了包含綁定器和日期驗(yàn)證器標(biāo)簽 
  13. type Booking struct { 
  14.   CheckIn  time.Time `form:"check_in" binding:"required,bookabledate" time_format:"2006-01-02"`  //登記時(shí)間 
  15.   CheckOut time.Time `form:"check_out" binding:"required,gtfield=CheckIn" time_format:"2006-01-02"`  //gtfield=CheckIn表示結(jié)賬時(shí)間必須大于登記時(shí)間 
  16.  
  17. // 定義日期驗(yàn)證器 
  18. var bookableDate validator.Func = func(fl validator.FieldLevel) bool { 
  19.   date, ok := fl.Field().Interface().(time.Time)  //利用反射獲取到字段值 -> 轉(zhuǎn)為接口 -> 類(lèi)型斷言(時(shí)間類(lèi)型) 
  20.   if ok { 
  21.     today := time.Now() 
  22.     if today.After(date) {  //如果當(dāng)前時(shí)間在checkIn字段時(shí)間之后,返回false,即登記時(shí)間不能早于當(dāng)前的時(shí)間 
  23.       return false 
  24.     } 
  25.   } 
  26.   return true 
  27.  
  28. func main() { 
  29.   route := gin.Default() 
  30.   //對(duì)binding.Validator.Engine()接口進(jìn)行類(lèi)型斷言,斷言類(lèi)型為Validate結(jié)構(gòu),如果斷言成功,就將自定義的驗(yàn)證器注冊(cè)到Gin內(nèi)部 
  31.   if v, ok := binding.Validator.Engine().(*validator.Validate); ok { 
  32.     // - if the key already exists, the previous validation function will be replaced. 該注冊(cè)方法會(huì)將已經(jīng)存在的驗(yàn)證器替換 
  33.     // - this method is not thread-safe it is intended that these all be registered prior to any validation 
  34.     // 注冊(cè)方法不是線(xiàn)程安全的, 在驗(yàn)證開(kāi)始前,需要保證所有的驗(yàn)證器都注冊(cè)成功 
  35.     v.RegisterValidation("bookabledate", bookableDate) 
  36.   } 
  37.  
  38.   route.GET("/bookable", getBookable) 
  39.   route.Run(":8085"
  40.  
  41. func getBookable(c *gin.Context) { 
  42.   var b Booking 
  43.   if err := c.ShouldBindWith(&b, binding.Query); err == nil { 
  44.     c.JSON(http.StatusOK, gin.H{"message""Booking dates are valid!"}) 
  45.   } else { 
  46.     c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) 
  47.   } 
  48.  
  49. //模擬請(qǐng)求: 
  50. // 登記時(shí)間和結(jié)賬時(shí)間符合條件 
  51. //$ curl "localhost:8085/bookable?check_in=2030-04-16&check_out=2030-04-17" 
  52. //{"message":"Booking dates are valid!"
  53. // 
  54. // 登記時(shí)間在結(jié)賬時(shí)間之后, 不滿(mǎn)足gtfield校驗(yàn)規(guī)則 
  55. //$ curl "localhost:8085/bookable?check_in=2030-03-10&check_out=2030-03-09" 
  56. //{"error":"Key: 'Booking.CheckOut' Error:Field validation for 'CheckOut' failed on the 'gtfield' tag"
  57. // 
  58. // 登記時(shí)間在當(dāng)前時(shí)間之前,不滿(mǎn)足自定義的驗(yàn)證器 
  59. //$ curl "localhost:8085/bookable?check_in=2000-03-09&check_out=2000-03-10" 
  60. //{"error":"Key: 'Booking.CheckIn' Error:Field validation for 'CheckIn' failed on the 'bookabledate' tag"}% 

另外結(jié)構(gòu)體級(jí)別的驗(yàn)證采用如下的方式注冊(cè), v.RegisterStructValidation(UserStructLevelValidation, User{}), 請(qǐng)參考struct-lvl-validation example(https://github.com/gin-gonic/examples/tree/master/struct-lvl-validations)

參考文檔

Gin官方倉(cāng)庫(kù):https://github.com/gin-gonic/gin

 

責(zé)任編輯:姜華 來(lái)源: 云原生云
相關(guān)推薦

2020-11-23 10:48:39

Golang GinW

2020-11-27 07:54:53

Golang GinW

2020-12-03 09:28:05

Golang GinW

2020-12-02 11:18:28

Golang GinW

2020-12-10 10:22:48

GinWeb中間件HTTPS

2025-03-31 01:30:00

Gin框架模型

2020-11-25 09:10:39

Golang GinW

2024-12-16 00:48:39

Gin框架函數(shù)

2022-10-17 09:02:49

Go自動(dòng)驗(yàn)證數(shù)據(jù)綁定

2020-11-25 09:18:15

Golang GinW

2020-12-08 12:05:48

Golang GinW框架HTTPS

2024-02-19 07:40:10

2024-11-11 00:45:54

Gin框架字段

2024-11-04 08:16:08

Go語(yǔ)言Web 框架

2011-08-18 16:25:55

西蒙VersaPOD 4

2023-10-22 20:20:37

FiberGo

2018-12-17 09:32:41

HTTPAPIWeb

2013-04-17 09:47:10

Windows PhoWindows Pho

2020-10-09 08:29:24

POSTGET參數(shù)

2011-03-30 09:03:57

struts2
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美亚洲国产精品久久| 日韩影视在线| 老司机午夜精品| 久久国产精品视频| 欧美大喷水吹潮合集在线观看| 亚洲天堂电影| 亚洲激情图片一区| 欧美性天天影院| www.天天干.com| 日本在线不卡视频| 韩国三级电影久久久久久| 国产一二三四区在线| 1769国产精品视频| 欧美日韩一本到| 日韩xxxx视频| 国产高清一区二区三区视频| 久久老女人爱爱| 99久热re在线精品996热视频| 91在线视频免费播放| 午夜精品av| 日韩小视频网址| 好吊视频在线观看| 红杏视频成人| 欧美一区二区高清| 日日躁夜夜躁aaaabbbb| 色老头在线一区二区三区| 1024成人网| 亚洲春色在线| 黄色免费在线播放| 91性感美女视频| 成人在线观看av| 国产精品国产精品国产专区| 日日骚欧美日韩| 91干在线观看| 黄色片视频网站| 国语精品一区| 欧美高清视频在线播放| 精品国产视频一区二区三区| 91嫩草亚洲精品| 在线亚洲欧美视频| 亚洲AV无码成人精品区明星换面 | 天天影视涩香欲综合网| 日韩video| 怡红院在线播放| 亚洲欧美aⅴ...| 99re99热| 韩国中文字幕在线| 亚洲丝袜美腿综合| 国产精品无码乱伦| 国产网友自拍视频导航网站在线观看| 国产女人18水真多18精品一级做| 欧美乱偷一区二区三区在线| 你懂的免费在线观看| 91亚洲精华国产精华精华液| 好吊色欧美一区二区三区四区 | 成人午夜短视频| av在线不卡观看| 91丨九色丨海角社区| 久热在线视频观看| 国产精品久久久久久福利一牛影视| 无码精品人妻一区二区| 在线免费av导航| 国产欧美1区2区3区| 欧美不卡123| 霍思燕三级露全乳照| 蜜臀av在线| 一区二区三区在线视频免费| 欧美日韩dvd| 国产精品偷拍| 高潮白浆女日韩av免费看| 漂亮人妻被中出中文字幕| 蜜桃精品在线| 欧美日韩精品久久久| 欧美日韩久久婷婷| 国内自拍欧美| 亚洲最新视频在线| 中文字幕求饶的少妇| 国产字幕视频一区二区| 午夜精品理论片| 国产美女www爽爽爽| 国产主播一区二区三区| 99久久伊人精品影院| 天堂av中文在线资源库| 国产精品色哟哟网站| 久久久99精品视频| 天天综合网天天| 337p亚洲精品色噜噜| 毛茸茸free性熟hd| 欧美色爱综合| 久久99视频精品| 日本中文字幕久久| 国产一区二区伦理| 蜜桃日韩视频| 国产黄色在线网站| 疯狂做受xxxx高潮欧美日本| 中文字幕资源在线观看| 日韩免费电影在线观看| 久久国内精品一国内精品| www.av视频在线观看| 日本美女一区二区| 国产伦视频一区二区三区| seseavlu视频在线| 五月天一区二区| 中文 日韩 欧美| 国产欧美日韩一区二区三区四区 | 欧洲成人午夜精品无码区久久| 欧美日韩大片免费观看| 久久精品国产91精品亚洲| 天天做天天爱夜夜爽| 国产一区二区三区在线观看免费视频 | 男人操女人逼免费视频| 99久久这里有精品| 一级做a爰片久久毛片美女图片| 国产真实夫妇交换视频| 狠狠色伊人亚洲综合成人| 久久伊人资源站| 变态调教一区二区三区| 欧美精品日韩综合在线| 中文字幕网站在线观看| 99热这里只有精品8| 91国产在线免费观看| 午夜视频在线免费观看| 在线免费观看日韩欧美| av网站有哪些| 日韩午夜高潮| 激情视频一区二区| 久久久久黄久久免费漫画| 欧美精品粉嫩高潮一区二区| www.99热| 日本伊人午夜精品| 水蜜桃一区二区三区| 久久电影tv| 日韩电影大片中文字幕| 日韩人妻无码一区二区三区99 | 丰满少妇一区二区| 激情欧美国产欧美| 国产伦精品一区二区三| 免费在线中文字幕| 日韩一区二区在线看片| 182在线观看视频| 韩国av一区二区三区四区 | 激情久久久久久| 99国产在线观看| 色yeye免费人成网站在线观看| 91精品国产综合久久久久| 黑人狂躁日本娇小| 国产精品自拍av| 日韩视频一二三| 99这里只有精品视频| 久久久久久久一| 网站黄在线观看| 精品日韩视频在线观看| 波多野结衣av在线免费观看| 玖玖在线精品| 亚洲精品9999| 91精品亚洲一区在线观看| 久热99视频在线观看| 亚洲黄色a级片| 亚洲va欧美va国产va天堂影院| 国产a√精品区二区三区四区| 亚洲美女黄色| 欧美日本国产精品| 国产精品久久亚洲不卡| 日韩中文理论片| 亚洲第一页视频| 精品久久久久久中文字幕大豆网| av小说在线观看| 亚洲综合社区| 一区二区三区四区| 亚洲国产高清在线观看| 欧美一区在线直播| 高清福利在线观看| 欧美一区二区三区性视频| 国产一级淫片a| 久久精品欧美一区二区三区麻豆| 欧美日韩中文不卡| 在线一区免费| 欧美精品一区二区三区在线看午夜| 成人黄页网站视频| 欧美劲爆第一页| 欧美套图亚洲一区| 666欧美在线视频| 日韩欧美亚洲视频| 亚洲国产成人一区二区三区| 日本少妇激三级做爰在线| 国产精品外国| 自拍亚洲欧美老师丝袜| 欧美黄色录像| 成人av在线亚洲| 在线看片福利| 欧美精品日韩三级| 国产在线视频网址| 精品国产一区二区精华| 少妇又紧又色又爽又刺激视频 | 日本精品久久久久久久久久| 欧美午夜精彩| 国产一区二区高清不卡 | 在线不卡欧美精品一区二区三区| 日韩av电影网| 日韩美女久久久| 成年人在线观看av| 国产精品综合一区二区三区| 欧美视频第三页| 欧美亚韩一区| 一级日韩一区在线观看| 亚洲精品蜜桃乱晃| 国产欧美日韩伦理| 亚洲一区二区av| 国产第一区电影| 日本动漫理论片在线观看网站 | 18aaaa精品欧美大片h| 中文字幕国产亚洲| 三级av在线| 亚洲第一福利网| 国产老妇伦国产熟女老妇视频| 日韩欧美在线国产| 久久亚洲成人av| 亚洲男人的天堂网| 成人三级视频在线观看| 欧美激情中文不卡| 亚洲女优在线观看| 91麻豆国产在线观看| 在线黄色免费网站| 国产福利一区二区三区在线视频| 日本中文字幕影院| 日韩精品乱码av一区二区| 97超碰青青草| 亚洲国产精品一区制服丝袜| 国产一区二区三区在线免费| 正在播放日韩欧美一页| 黄瓜视频免费观看在线观看www| 欧美一区电影| 神马影院一区二区三区| 精品久久久久久久| 日本精品一区二区三区不卡无字幕| 四虎影视精品| 欧美精品一区二区视频 | 在线观看久久久久久| 国产一区电影| 亚洲午夜精品久久久久久久久久久久| 午夜激情小视频| 日韩激情第一页| 日本午夜在线| 国产亚洲视频中文字幕视频| 国产资源在线看| 在线看福利67194| 日本免费在线视频| 欧美xxxx18国产| 牛牛在线精品视频| 久久免费视频网站| 白浆视频在线观看| 热久久免费国产视频| 二吊插入一穴一区二区| 国产精品视频专区| www999久久| 国产精华一区二区三区| 精品视频高潮| 日本亚洲导航| 欧美黄色大片在线观看| 女人床在线观看| 在线精品观看| 色婷婷综合久久久久中文字幕| 日韩avvvv在线播放| 国产欧美激情视频| 成人免费视频免费观看| 一二三不卡视频| 国产精品久久久久影院亚瑟| 国产高潮流白浆| 亚洲一区免费在线观看| 在线天堂中文字幕| 欧美日韩小视频| 国产高清免费av| 精品一区二区三区电影| 永久免费av在线| 高清在线视频日韩欧美| 久久精品女人天堂av免费观看| 成人妇女淫片aaaa视频| 成人午夜三级| 亚洲高清乱码| 尤物网精品视频| 午夜两性免费视频| 成人av网站免费观看| 亚洲色图 激情小说| 亚洲一区二区三区免费视频| 国产无遮挡又黄又爽又色视频| 91精品国产高清一区二区三区 | 岛国精品一区| 五月天国产一区| 亚洲欧洲日本mm| 欧美三级午夜理伦三级富婆| 大桥未久av一区二区三区中文| 一级特黄曰皮片视频| 亚洲一区在线观看免费| 波多野结衣在线观看视频| 日韩视频免费观看高清完整版 | 国产精品成人免费一区久久羞羞| 久久久久一区二区三区四区| 九九九免费视频| 欧美日韩一区不卡| 亚洲三区在线播放| 九九热这里只有精品6| 国产一区一一区高清不卡| 国产精品裸体一区二区三区| 97视频热人人精品免费| 欧美日韩第二页| 粉嫩av一区二区三区| 91ts人妖另类精品系列| 欧美日韩一二三四五区| 精品人妻久久久久一区二区三区 | 日韩一区二区三区三四区视频在线观看 | 精品九九久久| 欧美在线激情| 中日韩男男gay无套| 久久久国产精品久久久| 国产精品国产三级国产普通话三级| 国产又大又黄又粗| 亚洲国产精品久久久久秋霞不卡| jizzjizz亚洲| 国产欧美日韩高清| 欧美女王vk| 国产极品美女高潮无套久久久| av电影一区二区| 久久精品人妻一区二区三区| 91精品国产欧美日韩| 97视频精彩视频在线观看| 啪一啪鲁一鲁2019在线视频| 久久porn| 无码人妻丰满熟妇区96| av在线播放一区二区三区| 久久免费少妇高潮99精品| 日韩欧美中文字幕制服| av片在线观看永久免费| 亚洲va电影大全| 中国精品18videos性欧美| 天天色天天干天天色| 亚洲欧美aⅴ...| 亚洲av无码乱码在线观看性色| 成人97在线观看视频| 免费精品一区二区三区在线观看| 女同性恋一区二区| 国产高清成人在线| 国产精品6666| 日韩国产欧美精品一区二区三区| yellow字幕网在线| 久久精品国产精品青草色艺| 亚洲免费综合| 97人妻人人揉人人躁人人| 在线免费视频一区二区| 色影院视频在线| 92裸体在线视频网站| 狠狠88综合久久久久综合网| 性欧美18—19sex性高清| 懂色av影视一区二区三区| 可以在线观看的av网站| 国产精品爽爽爽| 91精品啪在线观看国产18| 日本人妻一区二区三区| 五月婷婷综合网| 国产一级在线观看| 国产欧美日韩免费| 欧美大片一区| 菠萝菠萝蜜网站| 欧洲日韩一区二区三区| 九色porny丨首页在线| 不卡一区二区三区四区五区| 国产精品久久久亚洲一区| 黄色片在线观看免费| 日韩一区二区免费电影| 国产亚洲成av人片在线观看| 日韩欧美国产二区| 国产精品一区一区三区| 国产手机在线视频| 少妇av一区二区三区| 亚洲精品在线播放| 久久久久久久激情| 自拍偷拍欧美激情| 日本精品久久久久久| 国产精品国产三级国产aⅴ9色| 性欧美欧美巨大69| 网站免费在线观看| 欧美久久久久久蜜桃| www.五月婷婷.com| 亚洲欧洲日韩在线| 丰满大乳国产精品| 国产精品成人av在线| 欧美日本中文| 俄罗斯毛片基地| 国产精品腿扒开做爽爽爽挤奶网站| 成人性生交xxxxx网站| 午夜久久福利| x88av在线| 亚洲成人久久久久| 国产成人精品一区二区三区在线 | 日韩精品无码一区二区三区久久久| 欧美理论电影在线| 日韩电影免费看| 免费看污污视频| 亚洲国产激情av| 日本一本草久在线中文| 福利视频一区二区三区|