国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

echo 源碼分析之校驗(yàn)器:Validator

共 10019字,需瀏覽 21分鐘

 ·

2021-05-10 17:57

echo 默認(rèn)沒(méi)有自己的validator,只提供了接口,需要自己實(shí)現(xiàn)

Echo struct {    Validator        Validator}

validator需要實(shí)現(xiàn)Validate接口

Validator interface {    Validate(i interface{}) error}

所以我們可以包裝一下go-playground/validator來(lái)實(shí)現(xiàn)echo的validator

由于go-playground/validator并沒(méi)有實(shí)現(xiàn)Validate方法,所以不能直接賦值

e.Validator := validator.New()

如何實(shí)現(xiàn)呢,可以自定義一個(gè)接口,中間調(diào)用validate.Struct(i)方法

package main
import ( "sync"
"github.com/go-playground/validator/v10")
type CustomValidator struct { once sync.Once validate *validator.Validate}
func (c *CustomValidator) Validate(i interface{}) error { c.lazyInit() return c.validate.Struct(i)}
func (c *CustomValidator) lazyInit() { c.once.Do(func() { c.validate = validator.New() })}
func NewCustomValidator() *CustomValidator { return &CustomValidator{}}

接著就可以賦值給echo的validator了

package main
import ( "fmt" "net/http"
"github.com/labstack/echo/v4")
type User struct { Name string `json:"name" param:"name" query:"name" form:"name" xml:"name" validate:"required"` // //curl -XGET http://localhost:1323/users/Joe\?email\=joe_email Email string `json:"email" form:"email" query:"email"`}
func main() { e := echo.New() e.Validator = NewCustomValidator() e.GET("/users/:name", func(c echo.Context) error { u := new(User) u.Name = c.Param("name") if err := c.Bind(u); err != nil { return c.JSON(http.StatusBadRequest, nil) }
if err := c.Validate(u); err != nil { return c.JSON(http.StatusBadRequest, nil) } return c.JSON(http.StatusOK, u) }) fmt.Println(e.Start(":1336"))}

我們看下go-playground/validator包含哪些文件

% lsLICENSEMakefileREADME.md_examplesnon-standardtestdatatranslations

baked_in.gobenchmarks_test.gocache.gocountry_codes.godoc.goerrors.gofield_level.gogo.modgo.sumlogo.pngregexes.gostruct_level.gotranslations.goutil.govalidator.govalidator_instance.govalidator_test.go

% ls non-standard/validators/notblank.gonotblank_test.go

主要是下面幾個(gè)部分:

baked_in.go :定義默認(rèn)【標(biāo)簽校驗(yàn)器】和【別名校驗(yàn)器】,程序初始的時(shí)候直接賦值了默認(rèn)的校驗(yàn)器,相當(dāng)于你買了個(gè)機(jī)器人送幾根電池的行為。當(dāng)然這邊你的校驗(yàn)器可以手動(dòng)添加自定義,后面會(huì)說(shuō)到

cache.go:定義結(jié)構(gòu)體校驗(yàn)器緩存、字段校驗(yàn)器緩存和獲取的方法,一個(gè)validator對(duì)象如果一直存活,他會(huì)把之前處理過(guò)的結(jié)構(gòu)體或者字段校驗(yàn)器進(jìn)行緩存.

regexes.go:【標(biāo)簽校驗(yàn)器】里面有一些使用到正則進(jìn)行校驗(yàn)的,這邊存儲(chǔ)的就是靜態(tài)的正則表達(dá)式

util.go:工具類,一般是用在【標(biāo)簽校驗(yàn)器】里面進(jìn)行處理

validator.go:校驗(yàn)類主體,提供四個(gè)主要的校驗(yàn)方法


validator一共提供了四種校驗(yàn)器:

validationFuncs     map[string]Func  //規(guī)則類型的校驗(yàn) 【tag標(biāo)簽】->        校驗(yàn)規(guī)則

structLevelFuncs    map[reflect.Type]StructLevelFunc  //規(guī)則結(jié)構(gòu)體的校驗(yàn)       【結(jié)構(gòu)體類型】->        校驗(yàn)規(guī)則

customTypeFuncs     map[reflect.Type]CustomTypeFunc  //類型校驗(yàn)器                   【數(shù)據(jù)類型】->         校驗(yàn)規(guī)則

aliasValidators     map[string]string                                     //別名校驗(yàn)器                   【別名匹配規(guī)則組合】->   校驗(yàn)規(guī)則


其中比較重要的就是

validator.govalidator_instance.go

這兩個(gè)文件,在validator_instance.go中的方法是公有的

func New() *Validate {
tc := new(tagCache) tc.m.Store(make(map[string]*cTag))
sc := new(structCache) sc.m.Store(make(map[reflect.Type]*cStruct))
v := &Validate{ tagName: defaultTagName, aliases: make(map[string]string, len(bakedInAliases)), validations: make(map[string]internalValidationFuncWrapper, len(bakedInValidators)), tagCache: tc, structCache: sc, }
// must copy alias validators for separate validations to be used in each validator instance for k, val := range bakedInAliases { v.RegisterAlias(k, val) }
// must copy validators for separate validations to be used in each instance for k, val := range bakedInValidators {
switch k { // these require that even if the value is nil that the validation should run, omitempty still overrides this behaviour case requiredIfTag, requiredUnlessTag, requiredWithTag, requiredWithAllTag, requiredWithoutTag, requiredWithoutAllTag: _ = v.registerValidation(k, wrapFunc(val), true, true) default: // no need to error check here, baked in will always be valid _ = v.registerValidation(k, wrapFunc(val), true, false) } }
v.pool = &sync.Pool{ New: func() interface{} { return &validate{ v: v, ns: make([]byte, 0, 64), actualNs: make([]byte, 0, 64), misc: make([]byte, 32), } }, }
return v}

1,先創(chuàng)建了兩個(gè)校驗(yàn)器緩存(緩存思想)

2,設(shè)置validator的標(biāo)簽、緩存信息等

3,注冊(cè)默認(rèn)校驗(yàn)器

4,注冊(cè)默認(rèn)tag校驗(yàn)器

5,返回validator

由于validate是每一個(gè)請(qǐng)求都需要的高頻操作,所以非常關(guān)注性能,盡量使用緩存。

校驗(yàn)器結(jié)構(gòu)體

Ⅰ.cTag(tag規(guī)則)

       cTag是一個(gè)鏈表,存儲(chǔ)一連串的相關(guān)聯(lián)tag的校驗(yàn)器,比如說(shuō)這邊是作為存儲(chǔ)一個(gè)Field的相關(guān)所有標(biāo)簽,看一下cTag的結(jié)構(gòu):

type cTag struct {  tag            string  //標(biāo)簽  aliasTag       string  //  actualAliasTag string  //  param          string  //如果是比較類型的標(biāo)簽,這里存放的是比較的值,比如說(shuō) min=10,這里存放的是【10】這個(gè)值  hasAlias       bool    //是否有別名校驗(yàn)器標(biāo)簽  typeof         tagType //對(duì)應(yīng)的tagType  hasTag         bool    //是否存在tag標(biāo)簽  fn             Func    //當(dāng)前cTag對(duì)應(yīng)的【tag標(biāo)簽校驗(yàn)器】  next           *cTag   //下一個(gè)cTag標(biāo)簽}

Ⅱ.cFeild(字段規(guī)則)

      cField代表一個(gè)結(jié)構(gòu)體字段對(duì)應(yīng)的規(guī)則,他會(huì)包含這個(gè)結(jié)構(gòu)體字段對(duì)應(yīng)的所有tag規(guī)則,也就是一組cTag鏈表存儲(chǔ)的規(guī)則:

type cField struct {  Idx     int    //字段下標(biāo)  Name    string //字段名  AltName string //  cTags   *cTag  //Field對(duì)應(yīng)的cTag規(guī)則,是一個(gè)鏈表(一串的規(guī)則).}

Ⅲ.cStruct(結(jié)構(gòu)體規(guī)則)

     同理,cStruct對(duì)應(yīng)的是這個(gè)結(jié)構(gòu)體所有字段(包含tag規(guī)則),以及這個(gè)結(jié)構(gòu)體自己對(duì)應(yīng)的【StructLevelFunc】的校驗(yàn)方法:

type cStruct struct {  Name   string          //結(jié)構(gòu)體名稱  fields map[int]*cField //結(jié)構(gòu)體對(duì)應(yīng)的字段map  fn     StructLevelFunc //結(jié)構(gòu)體校驗(yàn)器 (結(jié)構(gòu)體類型->結(jié)構(gòu)體校驗(yàn)器)}

可以看下調(diào)用Struct來(lái)進(jìn)行驗(yàn)證的過(guò)程

1,獲取結(jié)構(gòu)體的value

2,通過(guò)value,進(jìn)行結(jié)構(gòu)體校驗(yàn)

3,獲取err池錯(cuò)誤信息返回

func (v *Validate) Struct(s interface{}) error {  return v.StructCtx(context.Background(), s)}


func (v *Validate) StructCtx(ctx context.Context, s interface{}) (err error) {  vd := v.pool.Get().(*validate)  vd.validateStruct(ctx, top, val, val.Type(), vd.ns[0:0], vd.actualNs[0:0], nil)}

其中 validate是校驗(yàn)類的主體,所有的注冊(cè)和緩存數(shù)據(jù)、錯(cuò)誤信息數(shù)據(jù)都是存儲(chǔ)在validate中的,看一下具體的數(shù)據(jù)結(jié)構(gòu):

// Validate contains the validator settings passed in using the Config structtype Validate struct {  tagName             string                           //校驗(yàn)起作用的tag名  fieldNameTag        string                           //  validationFuncs     map[string]Func                  //規(guī)則類型的校驗(yàn)      【tag標(biāo)簽】->      校驗(yàn)規(guī)則  structLevelFuncs    map[reflect.Type]StructLevelFunc //規(guī)則結(jié)構(gòu)體的校驗(yàn)        【結(jié)構(gòu)體類型】->      校驗(yàn)規(guī)則  customTypeFuncs     map[reflect.Type]CustomTypeFunc  //類型校驗(yàn)器          【數(shù)據(jù)類型】->      校驗(yàn)規(guī)則  aliasValidators     map[string]string                //別名校驗(yàn)器           【別名匹配規(guī)則組合】->   校驗(yàn)規(guī)則  hasCustomFuncs      bool                             //是否存在類型校驗(yàn)器  hasAliasValidators  bool                             //是否有別名校驗(yàn)器  hasStructLevelFuncs bool                             //是否有結(jié)構(gòu)體校驗(yàn)器  tagCache            *tagCache                        //tag對(duì)應(yīng)的【校驗(yàn)規(guī)則方法】的緩存  structCache         *structCache                     //結(jié)構(gòu)體對(duì)應(yīng)的【校驗(yàn)規(guī)則方法】的緩存  errsPool            *sync.Pool                       //校驗(yàn)錯(cuò)誤獎(jiǎng)池}

定義在validator_instance.go

type validate struct {  v              *Validate  top            reflect.Value  ns             []byte  actualNs       []byte  errs           ValidationErrors  includeExclude map[string]struct{} // reset only if StructPartial or StructExcept are called, no need otherwise  ffn            FilterFunc  slflParent     reflect.Value // StructLevel & FieldLevel  slCurrent      reflect.Value // StructLevel & FieldLevel  flField        reflect.Value // StructLevel & FieldLevel  cf             *cField       // StructLevel & FieldLevel  ct             *cTag         // StructLevel & FieldLevel  misc           []byte        // misc reusable  str1           string        // misc reusable  str2           string        // misc reusable  fldIsPointer   bool          // StructLevel & FieldLevel  isPartial      bool  hasExcludes    bool}

定義在validator.go

在validator.go中還有兩個(gè)方法

1,獲取結(jié)構(gòu)體的數(shù)據(jù)

2,判斷是否為結(jié)構(gòu)體類型或者接口類型,不是的話直接進(jìn)行報(bào)錯(cuò)處理

3,傳入結(jié)構(gòu)體數(shù)據(jù)進(jìn)行處理

func (v *validate) validateStruct(ctx context.Context, parent reflect.Value, current reflect.Value, typ reflect.Type, ns []byte, structNs []byte, ct *cTag) {}

func (v *validatetraverseField(ctx context.Contextparent reflect.Valuecurrent reflect.Valuens []bytestructNs []bytecf *cFieldct *cTag) { }

1,獲取結(jié)構(gòu)體校驗(yàn)器緩存,如果沒(méi)有獲取到,則對(duì)該結(jié)構(gòu)體進(jìn)行解析,然后返回對(duì)應(yīng)的校驗(yàn)器,否則往下

2,判斷是否存在校驗(yàn)器,否則忽略該字段校驗(yàn)(這邊有一個(gè)判斷是first的判斷,如果是第一層,也就是傳進(jìn)來(lái)的機(jī)構(gòu)體一定會(huì)對(duì)它的Field進(jìn)行校驗(yàn))

2,循環(huán)所有的Field,判斷Field是否包含在不校驗(yàn)的集合中,如果不包含則進(jìn)行校驗(yàn),包含則不校驗(yàn)(這邊通過(guò)傳入一個(gè)【includeExclude】的map結(jié)構(gòu)可以指定對(duì)哪些字段不進(jìn)行校驗(yàn).這個(gè)在【StructExcept】方法中會(huì)用到)

3,判斷是否存在對(duì)應(yīng)的結(jié)構(gòu)體類型校驗(yàn)方法,如果存在則調(diào)用該方法進(jìn)行校驗(yàn)


整個(gè)驗(yàn)證的過(guò)程就是利用反射和struct tag中定義的一些語(yǔ)法擴(kuò)展,對(duì)參數(shù)的值進(jìn)行校驗(yàn)。

在很多工具類里面對(duì)于可能多次出現(xiàn)的東西都會(huì)進(jìn)行相應(yīng)的緩存處理,這邊也不例外,對(duì)于一個(gè)Validator。它可能會(huì)進(jìn)行多次校驗(yàn),那么可能會(huì)有重復(fù)的結(jié)構(gòu)體或者字段數(shù)據(jù),可以進(jìn)行緩存不需要下次再提取,所以這邊提供了兩個(gè)對(duì)應(yīng)的緩存。

1.structCache(結(jié)構(gòu)體緩存)

      這個(gè)緩存存儲(chǔ)的就是 【結(jié)構(gòu)體類型】->【cStruct】之間的對(duì)應(yīng)關(guān)系,考慮并發(fā)的問(wèn)題,這邊是進(jìn)行加鎖存儲(chǔ):

type structCache struct {  lock sync.Mutex  m    atomic.Value // map[reflect.Type]*cStruct}

對(duì)應(yīng)的緩存方法包含 Get、Set:

func (sc *structCache) Get(key reflect.Type) (c *cStruct, found bool) {  c, found = sc.m.Load().(map[reflect.Type]*cStruct)[key]  return  }
func (sc *structCache) Set(key reflect.Type, value *cStruct) {   m := sc.m.Load().(map[reflect.Type]*cStruct)   nm := make(map[reflect.Type]*cStruct, len(m)+1)  for k, v := range m {    nm[k] = v  }  nm[key] = value  sc.m.Store(nm)}

2.tagCache(標(biāo)簽規(guī)則緩存)

      這個(gè)緩存存儲(chǔ)的就是 【tag】 ->【cTag】之間的對(duì)應(yīng)關(guān)系,考慮并發(fā)的問(wèn)題,這邊是進(jìn)行加鎖存儲(chǔ):

type tagCache struct {  lock sync.Mutex  m    atomic.Value // map[string]*cTag}

對(duì)應(yīng)的緩存方法包含 Get、Set:

func (tc *tagCache) Get(key string) (c *cTag, found bool) {  c, found = tc.m.Load().(map[string]*cTag)[key]  return}
func (tc *tagCache) Set(key string, value *cTag) {   m := tc.m.Load().(map[string]*cTag)   nm := make(map[string]*cTag, len(m)+1)  for k, v := range m {    nm[k] = v  }  nm[key] = value  tc.m.Store(nm)}



推薦閱讀


福利

我為大家整理了一份從入門到進(jìn)階的Go學(xué)習(xí)資料禮包,包含學(xué)習(xí)建議:入門看什么,進(jìn)階看什么。關(guān)注公眾號(hào) 「polarisxu」,回復(fù) ebook 獲?。贿€可以回復(fù)「進(jìn)群」,和數(shù)萬(wàn) Gopher 交流學(xué)習(xí)。


瀏覽 35
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 国产一级影院| 五月天婷婷网站| 亚洲日韩网站在线观看| 洞av | 久久久久久无码日韩欧美电影| 爱爱视频免费看| 日韩欧美成人视频| 中文资源在线a中文| 嫩BBB槡BBBB槡BBBB免费视频| 日韩欧美国产成人| 色欧美大香蕉| 国产精品福利在线| 91拍真实国产伦偷精品| 99精品免费| 欧美日韩色| 日本精品在线播放| 亚洲天堂AV在线观看| 久草三级片| 黄色网址av| 日韩小视频| 青青草大香蕉| 国产精品久久精品| 伊人视频在线| 北条麻妃毛片| 成人AV一区二区三区| 欧美成a| 欧一美一婬一伦一区二区三区自慰国| 中文字幕五月久久婷婷| 国产高清做爱免费在线视频| 精品人妻一区二区三区含羞草| 久久波多野结衣| 欧美午夜在线| 国产一级婬片A片免费无成人黑豆| 波多野结衣无码AV| 永久免费AV| 干老女人逼| www.大香蕉伊人| 天天色天天干天天| 日本一区二区网站| 无码不卡视频在线观看| 夜夜骚精品人妻av一区| 黄色三级片网站| 毛片网站在线| 成人免费黄色| 国产精品色色| 中文字幕免费视频在线观看| 中文字幕四区| 18AV在线观看| 四虎成人免费视频| 日本精品黄色视频| 久久国产热视频| 操逼视频电影| 91久久精品日日躁夜夜躁欧美| 亚洲一区二区视频在线观看| 影音先锋久久久久AV综合网成人| 久久中文字幕无码| 成人性在线| 人人妻人人澡人人爽久久| 韩国日本久久| 日韩精品成人专区无码| 亚洲视频免费观看| 蜜桃黄片AV在线观看| 国产精品无码一区二区三区免费| 欧美一级日韩一级| 麻豆偷拍| 中文字幕在线观看视频www| 欧美日韩免费在线观看| 欧美肏屄| 婷婷中文字幕| 久久99热这里只频精品6学生| 天堂成人在线| 无码人妻精品一区二区三千菊电影| 一区二区成人电影| 小泬BBBBBB免费看| 人妻体内射精一区二区三区| 午夜成人鲁丝片午夜精品| 黄网免费| 天天做天天爽| 青青色在线观看| 干老女人视频| 亚洲人妻无码一区| 欧美成人精品在线| 91成人一区| 视频一区二区三区在线观看| 成人精品毛片| 久久WW| 国产性爱网址| 哪里可以看毛片| 黄a网站| www.国产在线观看| 免费日韩| 99视频在线播放| 中文字幕亞洲高清手機版第617| 国产在线黄片| 中文一级片| 91嫖妓站街按摩店老熟女| 91综合娱乐| 四虎精品| 欧美一级二级三级| 香蕉av在线观看| 国产人国产视频成人免费观看… | 国产乱伦不卡| 翔田千里无码流出两部| 涩久久久| 欧美日韩三级在线| 操鸡视频在线观看| 国产精品久久久久久久久久久久久久久久 | 久久成人片| 精品国产91乱码一区二区三区| 亚洲国产一区二区三区| 黄色一级网站| 国产性爱自拍一下| 精品国产免费观看久久久_久久天天 | 免费看黄色AV| 在线天堂999| 91中文字幕在线播放| 国产TS变态重口人妖| 高清无码二区| 18禁一区| 久久性爱网| 国产成人一区二区三区| a片在线免费观看| 免费视频一区二区| 三级理论片| 成人亚洲性情网站www在线| 欧美怡红院视频| 亚洲AV毛片成人精品网站| 成人精品一区日本无码网站suv| 国产精彩无码视频| 无码AV免费观看| 北条麻妃精品| 中文精品字幕人妻熟女| 久久精品视频免费| 日韩精品成人专区无码| 国产一精品| 精品国产AV色一区二区深夜久久 | 91视频一区| 精品无码一区二区三区四区久久久软件 | 免费视频| 殴美老妇BBBBBBBBB| 青青草原亚洲| 男人天堂AV片| 激情小视频在线| 老司机午夜电影| 全部在线A片免费播放| 动漫人物插画动漫人物的视频软件| 精品成人网| 欧洲综合视频| 高清视频无码| 91色秘乱码一区二区| 欧美一级a视频免费放| 欧美综合婷婷| 超碰77| 日本色视频| 婷婷五月天网| 伊人精品视频| 女人久久| 婷婷在线视频| 亚洲黄色无码视频| 韩国无码AV| 天天日天天日天天操| 黄片网址大全| 大香蕉网在线| 天天狠狠干| 国产妞干网| 69成人网站| 中文有码| 亚洲精品一区中文字幕乱码| 黄片视频在线免费播放| 吃奶做爱视频| 国产成人av在线观看| 国产视频一区二区在线观看| 国产精品二区高清在线苍井空| 自拍偷拍视频网站| 欧美日韩国产免费观看成人片| 久久综合17p| www.久久久| 青草视频在线免费观看| 美女被操91| 97人人爱| 中文字幕丰满的翔田千里| 国产精品做爱| 欧美女人日逼视频| 精品无码一区二区三区免费| 日韩VA| 思思热在线观看视频| 亚洲无码AV一区二区三区| 日韩人妻无码一区二区三区99| 999精品视频| 午夜免费播放观看在线视频| 北条麻妃无码视频在线| 四房五月婷婷| 二区三区免费视频| 亚洲精品一区二区三| 欧美日韩黄| 日韩视频免费观看高清完整版在线观 | 人人操人人干人人妻| 四虎在线免费视频| 69xx视频| 国产av中文字幕| 亚洲AV秘无码一区浜崎りお| 久久黄色A片| 好好日视频| 97超碰人人摸| 欧美国产乱伦| 日韩免费观看视频| 国产伦精品一区二区三区妓女| 狼友初视频在线观看| 亚洲最新在线视频| 丰满人妻一区二区三区四区不卡| 60分钟上大床又黄又爽| 亚洲无码视频在线观看| 亚洲中文字幕av天堂| 婷婷五月天色色| 国产嫩BBwBBw高潮| 国产AⅤ| www.黄色| 日本少妇性爱视频| 黄色A片免费观看| 精品视频无码| 99视频网| 蜜桃成人AV| 蜜臂AV| 久操视频免费在线观看| 男男做受A片AAAA| 蜜桃AV| 国产在线观看自拍| 国产高清第一页| 日日摸日日操| 国产精品秘久久久久久99| 俺来也官网欧美久久精品| 国产日韩91| 在线观看视频无码| 蜜桃精品在线观看| 四川妇BBB桑BBB桑BBB| 国产91小视频| 我爱大香蕉| 中文字幕观看在线| 亚洲色图欧美| 中文字幕无码精品三级在线欧美| 日韩码波多野结衣| 国产内射无码| 日本精品一区二区| 亚洲黄色视频在线免费观看| 一级性爽AV毛片| 国产毛片基地| 91夫妻交友视频| 国产思思99re99在线观看 | 人妻无码中文字幕蜜桃| 91狠狠综| 久久9热| 人人干人人看| 91成人电影院| 亚洲在线网站| 久操国产| 亚洲国精产品| 亚韩av| 国产婷婷色一区二区在线观看 | 69精品免费视频| 日本电影一区二区三区| 午夜福利成人视频| 麻豆成人片| 韩国gogogo高清在线完整版| 麻豆亚洲AV成人无码久久精品| 亚洲性爱AV| 激情婷婷亚洲| 97视频国产| 逼网站| 影音先锋无码AV| 亚洲三级无码在线| 国产操操操| 国产亚洲视频完整在线观看| 在线观看国产一级片| 日韩在线视频91| 一区二区三区四区视频在线| 黄色片在线免费观看| 性爱A级视频| 亚洲小说区图片区都市| 国产视频福利| 永久免费AV无码| 免费的操逼视频| 欧美日韩不卡在线| 中文字幕在线视频第一页| 大香蕉性爱网| 懂色av,蜜臀AV粉嫩av| 瘦精品无码一区二区三区四区五区六区七区八区 | 亚洲区中文字幕| 亚洲日韩中文字幕| 欧美大屌网站| 中文在线高清字幕| 免费的黄色录像| 欧美五月在线网址| 欧美女人日逼视频| 伦理被部长侵犯HD中字| 五月天激情电影| 欧美性爱在线网站| 久久AV秘一区二区三区水生| 久久99久久99久久| 国产三级黄| 精品国产国产没封| 国产伦理一区| 亚洲精品人伦一区二区| 在线成人小视频| 精品人伦一区二区三区| 日韩一页| 内射网站在线看| 日屁视频| 亚洲成a人无码| 成全在线观看高清的| 亚洲情免| 农村三级片| 国产18| 2021天天夜日| 日韩高清一区二区| 国产草逼网站| 91成人在线免费视频| 精品国产免费观看久久久_久久天天 | 丰满少妇一区二区三区| 国产精品探花熟女AV| 一级片免费网站| 天天爽夜夜爽夜夜爽精品视频| 日本韩国欧美18| 俺来也俺也啪www色| www.有码99| 91精品国产综合久久蜜臀使用方法| 久久久人妻无码精品蜜桃| 国产免费一级片| 淫乱人妻| 91麻豆免费视频| 中文字幕第一页在线| 成功精品影院| 波多野结衣视频网站| 99热日韩| a国产| 无码在线专区| 无码一二三区| 十八无码成人免费网站| 久久国产劲爆∧v内射| 在线观看黄色| 国产色视频在线| 欧美亚洲小说| 久草青青草| 欧美在线看片| 男女做爱视频网站| 婷婷五月天丁香成人社区| 欧美操b| 操逼日韩欧美| 一区二区三区久久久久〖网:.〗 | 久久高清免费视频| 亚洲精品国产成人AV在线| 黄色成人视频在线观看| 天天干天天日| 91综合网| 国产三级免费观看| 国产免费黄色| 日本中文视频| 日本免费高清视频在线观看一区| 久操视频免费在线观看| 性视频人人| www.热久久| 九九视屏| 日韩亚洲视频| 91亚色视频| 久久综合伊人| 国产精品久久免费视频| 欧美v日韩| 2024av在线| 久热精品在线观看| 一边做一边说国语对白| 国产AV毛片| 日韩欧美国产综合| 青青草无码成人AV片| 人成免费在线视频| 亚洲免费MV| 北条麻妃中文字幕在线观看| 人人爽亚洲AV人人爽AV人人片 | 国产精品77777| 伊人日日| 中文在线永久免费观看| 日韩午夜无码| 日本色色| a级片在线观看| 操东北女人| 成年人在线播放| 瘦精品无码一区二区三区四区五区六区七区八区| 日韩欧美精品一区二区| 一牛影视精品av| 久久精品大香蕉| 天堂色播| 黄色网页在线观看| 日本免费爱爱| 欧美日综合| 亚洲无码成人片| 少妇搡BBBB搡BBB搡造水多,| 国产精品你懂的| 精品无码视频在线| 欧美成人伦理片网| 久久精品夜色噜噜亚洲A∨| 日韩一区二区免费看| 成人黄片视频| 一本色道久久综合无码人妻四虎 | WW免费视频| 亚洲影院在线观看| 无码蜜桃吴梦梦| 国产色婷婷| 91视频中文字幕| 欧美A级黄片| 人人操人人操人人操| 夜夜爽7777精品国产三级| 婷婷午夜| 欧美A片在线| 一级日韩一级欧美| 奇米AV| 丰满人妻一区二区三区四区53| 国产三级黄色AV| 秋霞福利网| 国产精品免费一区二区三区四区视频 | 人人干人人干| 波多野结衣一级| 99性视频| 亚洲性视频| 爱爱视频免费网站| 亚洲性爱在线| 91爱搞| 久久免费成人电影| 91视频精品| 91精品久久久久久久久久| 一区二区精品视频| 婷婷伊人| 69国产精品无码免费| 中文字字幕中文字幕乱码| 91小视频在线观看| 美女网站视频黄| www.黄色| 爆操熟女| 操极品少妇逼| 视频一区乳奴| 俺也去也| 久久亚洲精品视频| 久久精彩偷拍视频| 国产看片网站| 亚洲午夜成人精品一区二区| 狠狠干亚洲视频| 色婷婷亚洲婷婷| 狠狠狠狠狠狠操| 国产三级| 91露脸熟女四川熟女在线观看| 91精品人妻一区二区三区四区 | 久草91| 国产乱子伦-区二区三区四区| 91偷拍与自偷拍精品无码| 在线免费观看黄色| 国产成人视频免费| 亚洲综合中文字幕在线播放| 日韩看片| a4yy午夜福利| 中文字幕精品一级A片| 久久嫩草在线影院| 国产精品热| 亚洲人妻有码| 日本女人高潮视频| 中文字幕网站| 国产三级小视频| 黄色大片免费网站| 日韩欧美国产| 色丁香婷婷| 53岁露大奶熟女偷情贴吧| 一本色道88久久加勒比精品| 久久午夜福利| 人妻AV无码| 婷婷五月天免费视频| 中文字幕在线观看一区| 91导航| 欧美乱伦一区| 一级黄色AV片| av中文字幕在线播放| 久久偷拍网| 性爱xxxxx| 无码少妇| 欧美一区二区三曲的| 色色激情五月天| 成人在线看片| AA片在线观看视频在线播放| 热99re69精品8在线播放| 午夜成人网站在线观看| 久热9191| 蜜臀久久99精品久久久电影| 60分钟上大床又黄又爽| 一区四区视频| a亚洲天堂| 中文字幕一区二区三区四区50岁 | 无码伦理| 午夜视频18| 久久久一区二区三区四曲免费听| 人人草在线视频| 91中文字幕在线播放| 7777精品伊人久久7777| 久久嫩草在线影院| 日本人人操| 亚洲在线一区| 东京热第一页| а√天堂中文最新版8| 亚洲va国产va天堂va久久| 国产最新地址| 日本一级特级毛片视频| 黄色一级爱爱| 蜜桃av秘无码一区三区四| 中文无码一区| 久久偷看各类wc女厕嘘嘘偷窃| 2021狠狠操| 色男人天堂| 伊人五月天激情| 一本色道久久综合无码人妻软件 | 久久国产欧美| h视频免费看| 久久精品视频久久| 午夜天堂精品久久久久| 国产精品无码天天爽视频| 四川BBB嫩BBBB爽BBBB| 日韩AV成人无码久久电影| 人人操人人| 成人网站在线观看视频| 国产精品美女视频| 欧美黄色免费在线观看| 欧美怕怕| 激情五月天婷婷| 精东影业秘国产传媒| 国产第56页| 精品无码一区二区三区在线| 大香蕉伊人青青草| yOujiZZ欧美精品| 国产人成一区二区三区影院| 蜜芽AV在线| 亚洲尤物| 蜜臀久久99久久久久久宅男| 日韩成人无| 操逼免费观看| 人妻无码在线视频| 日韩大香蕉视频| 国产av中文| 嗯啊在线视频| 成人国产欧美日韩在线视频| 蜜桃一区二区三区| 自拍偷拍欧美| 国产夫妻自拍AV| 天堂网av2014| 蜜乳av红桃嫩久久| 综合五月婷婷| 国内精品一区二区| 婷婷五月视频| 2025国产成人精品一区| 草榴在线视频| 第一福利导航大全| 亚洲a在线视频| 久久久久久无码日韩欧美电影 | 精品国产久久久| 日韩一区二区免费视频| 国产精品第二页| 97一区| 无码一区二区三区免费看| 婷婷深爱五月丁香网| 91香蕉视频18| 激情色播| 国产欧美成人| 一区二区三区久久久久〖网:.〗 | 欧美日韩一区二区在线| 91国产精品在线视频| AV电影免费看| 日逼网址| 操B视频网站| 国产欧美综合视频| 人妻体内射精一区二区三区| 无码无码一区二区三区| 北条麻妃AV观看| 日本在线不卡视频| 黄色录像一级带| 成人片成人网久久蜜桃臀| 国产欧美熟妇另类久久久| 99在线精品视频免费观看软件| 新妺妺窝窝777777野外| 少妇人妻精品| 日韩av第一页| 无码AV电影在线观看| 婷婷五月福利| 女同三区| 少妇在厨房| 中文字幕无码在线| 国产伦子伦一级A片免费看小说| 中文字幕乱码亚州无线码日韩理论电| 亚洲一区二区在线视频| 我和岳m愉情XXXⅩ视频| 国产视频入口| 亚洲AA视频| 91人妻人人澡人人爽人人精品一| 国产天堂视频| 奶头和荫蒂添的好舒服囗交漫画| 亚洲不卡视频| 亚洲精品99| 在线观看国产黄色| 无码免费视频在线观看| 一级片在线视频| 3d动漫精品H区XXXXX区| 中文字幕精品在线视频| 黄在线免费观看| 18成人网站在线观看| 三级影片在线观看性| 9l视频自拍蝌蚪9l视频成人| 国产一区二区久久| 国产人妻一区二区三区欧美毛片| 北条麻妃无码| 亚洲欧美成人在线| 特黄网站| 激情一区二区三区| 五月婷婷六月激情| eeuss一区| 欧美大香蕉在线视频| 久久久久婷婷| 亚洲精品色| 午夜偷拍| 九九综合伊人7777777| 国产伦精品一区二区三区视频女| 亚洲AV一二三区| 成人福利电影| 艹美女视频| 男女性爱视频网站| 少妇性受XXXX黑人XYX性爽 | 久久综合久久鬼色| 九九热无码| 亚洲无码aa| 丁香六月操| 中文人妻av| 成人做爰免费网站2023| 欧美99| 99re99| 人人操人人射| 久操影视| 山东熟妇搡BBBB搡BBBB| 欧美一区二区三区四区视频| 麻豆久久久| 欧美肏逼视频| 久久黄色视频网站| 成人三级在线| 欧美精品99久久久| 国产又粗又长| 日韩无码中文字幕| 国产中文字幕在线播放| 嫩BBB搡BBB搡BBB搡| 水蜜桃一曲二区| 亚洲中文字幕免费观看| 无码免费一区二区| 欧美成人精品一区二区三区| 欧美成人无码A片免费| 免费黄色一级片| 国精品91无码一区二区三区在线 | 欧美色色色色色色| 军人妓女院BD高清片在线播放| 久久久无码精品亚洲| 国产女人18毛片精品18水| 国产精品黄色电影| 91亚洲精品在线| 成人视频一区二区| 中文字幕人妻日韩在线| 国产成人精品免费视频| 3D动漫精品啪啪一区二区免费| 欧美视频在线播放| 大香蕉A片| 国产精品自拍视频| www.亚洲无码| 日韩中文性受视频| 国产欧美精品在线观看| 日韩一a| 青青草综合视频| 日韩bbbb| 青青操青青干| 在线无码视频观看| 中文字幕精品视频在线| 麻豆传媒在线| 三浦恵子一级婬片A片| 俺也去网站| 香蕉国产2023| 无码日韩视频| 午夜福利10000| 天天撸天天射| 91插逼| 插菊综合网| 97国产视频| 在线观看黄片| 亚洲午夜久久久之蝌蚪窝| 大香蕉伊人丁香五月| 久色婷婷在线| 中文在线不卡| 特黄无码| 人妻少妇精品无码| 免费A在线观看| 久久久久亚洲AV无码麻豆| 91精品国产91久久久久久久久久 | 蜜臀久久| 欧美国产日韩在线| 高清无码在线观看视频| 久草网站| 蜜臀AV一区二区三区免费看| 99成人精品| 久久久久久免费一级A片| 日韩精品无码人妻| 三级在线网站| 91丨九色丨国产在线| 日韩成人视频在线| 国产成人精品免高潮在线人与禽一| 在线免费观看毛片| 18禁www| 天天做| 韩日A片| 日韩中文字幕区| 亚洲精品无码更新| 国产一级片免费| 男人天堂久久| 99久久99九九九99九他书对| 无码视频网| 婷婷五月中文字幕| 亚洲中文字幕在线播放| 你懂的久久| 熟女人妻人妻の视频| 特级444www| 中文一区在线| 欧美伊人大香蕉| 国产欧美综合一区二区三区 | 水果派成人播放无码| 99精品一区二区三区| 俺去也俺去啦| 高清无码在线免费观看视频| 国产经典午夜福利视频合集| 伊人福利导航| 国产av天堂| 蜜臀AV在线| 五月亚洲六月婷婷| 霸道总裁雷总各种姿势白浆爱情岛论坛 | 亚洲午夜在线| 亚洲超碰在线| 亚洲AV成人无码精在线| 欧美中文字幕| 俺也去电影| 一区二区三区福利| 欧美操逼在线| 日韩在线视频91| 一区二区三区无码在线| www.天天干| 国产AV日韩| 欧美大屌网站| 在线免费看黄视频| 夜夜艹| 一级片无码| 色播五月天| 男女性爱视频免费| 成人H动漫精品一区二区无码| 乱伦AV片| 亚州av| 99er热精品视频| 尤物在线视频| 夜夜操操| 国产精品v欧美精品v日韩| 99一区| 97狠狠| 影音先锋一区二区三区| 性爱视频91| 91av在线观看视频| 狠狠色五月亚洲91| 国产乱妇乱子伦视频免费观看让女人 | 人人骚| 亚洲成人无码视频| a三级片| 免费日B视频| 免费在线黄色视频| 久色国产| 综合婷婷| 国产精品久久久久久最猛| 91涩| 亚洲精品资源在线| 三级黄色片| 东方美美高清无码一区| 日日擼夜夜擼| 国产精品永久久久久久久久久| 青青青草视频在线观看| 国产精品九九| 亚洲va在线∨a天堂va欧美va| 久久久在线视频| 亚久久久| 亚洲无码AV一区二区三区| 免费看操逼| 91久久精品国产91久久公交车| 熟女熟妇人妻一区二区三区| 日韩AV中文| 日韩福利在线观看| 青青草免费在线视| 亚洲Av秘无码一区二区| 撸一撸AV| 国产A片视频| 国产高清做爱| 超碰av电影| 熟女人妻ThePorn| 黄a网站| 欧美怡春院| 蜜桃黄色视频| 日韩成人高清| 婷婷久久综| 招土一级黄色片| 午夜精品一区二区三区在线成人 | 97国产精品久久| 久操视频免费| 午夜精品视频| www.av在线播放| 国产av资源网| 欧美级毛片一夜| 日韩高清无码免费| AV观看免费| 国产无套进入免费| 日韩无码A片| 久久午夜无码鲁片午夜精品男男 | 欧美高潮喷水| 中文字幕91| 另类视频区| 99精品视频国产| 无码狠狠躁久久久久久久91 | 久碰人妻人妻人妻| 黑人一区二区| 色色无码| 三级片日本在线| 天堂va欧美ⅴa亚洲va一夜| 黄页免费视频| 欧美一级日韩一级| www日本黄色| 久久婷婷国产麻豆91天堂| www.国产精品| 午夜福利100| 在线免费观看成人视频| 婷婷五月一区| 日韩在线视频观看| 大香蕉色婷婷| 日韩av中文| 天天操天天拍| 日韩主播在线| 亚洲国产欧美日韩在线| 亚洲天堂一区二区| 亚洲综合一二三区| 加勒比一区二区三区| 伊人久久中文字幕| 黄色一级A片| 天堂中文资源在线观看| 亚洲精品视频免费看| 一区二区三区亚洲| 好爽~要尿了~要喷了~同桌| 成人性爱视频在线播放| 久久美女视频| 成人做爱免费看| 欧美区亚洲区| 最新无码视频| 日韩三级在线免费观看| 噜噜噜久久久| 免费在线看a| 亚洲成人免费福利| 国产免费一级特黄A片| 色综合久| 天天狠天天干| 中文字幕北条麻妃在线| 俺来也俺就去www色情网| а√天堂中文最新版8| 国产亚洲成人综合| H片在线播放| 人妻无码91| 一区二区三区精品无码| 麻豆91精品人妻成人无码| 国产a一级a毛一级视频| av婷婷五月天| 三级网址在线观看| 麻豆性交| AV一区二区在线观看| 亚洲影音| 91精品国产91久久久久久吃药| 国内自拍av| 操逼无码| 免费看无码| 一级A黄色片| 黄色精品久久| 亚洲二区在线| 日韩一二区| 成人AV一AV二| 一本色道久久综合狠狠躁的推荐| 国产大奶一区二区| 国产一区二区三区免费观看 | 黄色毛片网| 免费的操逼视频| 性爱视频91| A天堂视频| 久久久久久久久久久高清毛片一级| 四虎午夜福利| 五月天婷婷丁香综合视频| 国产成人一区| 色婷婷一二三精品A片| 成人自拍视频在线观看| 亚洲视频欧洲视频| 一级黄色小视频|