日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

go语言的魔幻旅行38-gin、Gorm整合实现restfui api

發布時間:2024/3/12 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go语言的魔幻旅行38-gin、Gorm整合实现restfui api 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

空談誤國,實干興邦,零碎的知識掌握的再多,如果不將它們整個的串聯起來就是一堆沒有頭緒的點,為了充分的將之前講解的相關的gin、gorm相關的知識有邏輯的串聯起來,接下來的教程將實現一個具有restfui風格的api,需要具備的知識點有gin、gorm、viper等。

項目的包結構說明

one- conf- config- enum- handler- model- query- repository- resp- service- utilsgo.modHandler.gomain.go

conf目錄主要存放項目的配置文件config.yaml, config目錄主要存放config.go加載項目的配置文件的實現,enum存放定義的常量、model存放實體類、repository存放數據庫交互接口、service存放數據庫接口調用類、handler存放對應的處理器、query包和utils分貝存放分頁查詢實體和工具類,Handler.go實現配置DB對象、handler對象、配置文件初始化,main.go配置路由。

配置文件相關

one/conf/config.yaml

mode: debug port: :9090 url: http://127.0.0.1:9090 max_check_count: 10 database:name: testhost: 127.0.0.1:3306username: rootpassword: root

one/config/config.go

import ("github.com/fsnotify/fsnotify""github.com/spf13/viper""log" )const PAGE_SIZE int = 10type Config struct {Name string }func Init(name string) error {c := Config{Name: name,}//初始化配置文件if err := c.initConfig(); err != nil {return err}//監控配置文件變化并熱加載程序c.watchConfig()return nil }func (c *Config) initConfig() error {//如果指定了配置文件,則解析指定的配置文件if c.Name != "" {viper.SetConfigFile(c.Name)} else {//如果沒有指定配置文件,則解析默認的配置文件viper.AddConfigPath("conf")viper.SetConfigName("config")}// 設置配置文件格式為YAMLviper.SetConfigType("yaml")if err := viper.ReadInConfig(); err != nil { // viper解析配置文件return err}return nil }// 監控配置文件變化并熱加載程序 func (c *Config) watchConfig() {viper.WatchConfig()viper.OnConfigChange(func(e fsnotify.Event) {log.Printf("Config file changed: %s", e.Name)}) }

數據庫交互實現

one/repository/user.go

import ("fmt""gorm.io/gorm""one/model""one/query""one/utils" )type UserRepository struct {DB *gorm.DB }type UserRepoInterface interface {List(req *query.ListQuery) (users []*model.User, err error)GetTotal(req *query.ListQuery) (total int64, err error)Get(user model.User) (*model.User, error)Exist(user model.User) *model.UserExistByUserID(id string) *model.UserExistByMobile(mobile string) *model.UserAdd(user model.User) (*model.User, error)Edit(user model.User) (bool, error)Delete(u model.User) (bool, error) }func (repo *UserRepository) List(req *query.ListQuery) (users []*model.User, err error) {fmt.Println(req)db := repo.DBlimit, offset := utils.Page(req.PageSize, req.Page) // 分頁if err := db.Order("id desc").Limit(limit).Offset(offset).Find(&users).Error; err != nil {return nil, err}return users, nil }func (repo *UserRepository) GetTotal(req *query.ListQuery) (total int64, err error) {var users []model.Userdb := repo.DBif err := db.Find(&users).Count(&total).Error; err != nil {return total, err}return total, nil }func (repo *UserRepository) Get(user model.User) (*model.User, error) {if err := repo.DB.Where(&user).Find(&user).Error; err != nil {return nil, err}return &user, nil }func (repo *UserRepository) Exist(user model.User) *model.User {var count intrepo.DB.Find(&user).Where("nick_name = ?", user.NickName)if count > 0 {return &user}return nil }func (repo *UserRepository) ExistByMobile(mobile string) *model.User {var count intvar user model.Userrepo.DB.Find(&user).Where("mobile = ?", mobile)if count > 0 {return &user}return nil }func (repo *UserRepository) ExistByUserID(id string) *model.User {var user model.Userrepo.DB.Where("user_id = ?", id).First(&user)return &user }func (repo *UserRepository) Add(user model.User) (*model.User, error) {if exist := repo.Exist(user); exist != nil {return nil, fmt.Errorf("用戶注冊已存在")}err := repo.DB.Create(&user).Errorif err != nil {return nil, fmt.Errorf("用戶注冊失敗")}return &user, nil }func (repo *UserRepository) Edit(user model.User) (bool, error) {err := repo.DB.Model(&user).Where("user_id=?", user.UserId).Updates(map[string]interface{}{"nick_name": user.NickName, "mobile": user.Mobile, "address": user.Address}).Error//err := repo.DB.Save(&user).Errorif err != nil {return false, err}return true, nil }func (repo *UserRepository) Delete(u model.User) (bool, error) {err := repo.DB.Model(&u).Where("user_id=?", u.UserId).Update("is_deleted", u.IsDeleted).Errorif err != nil {return false, err}return true, nil }

one/service/user.go

import ("errors""fmt"uuid "github.com/satori/go.uuid""one/config""one/model""one/query""one/repository""one/utils" )type UserSrv interface {List(req *query.ListQuery) (users []*model.User, err error)GetTotal(req *query.ListQuery) (total int64, err error)Get(user model.User) (*model.User, error)Exist(user model.User) *model.UserExistByUserID(id string) *model.UserAdd(user model.User) (*model.User, error)Edit(user model.User) (bool, error)Delete(id string) (bool, error) }type UserService struct {Repo repository.UserRepoInterface }func (srv *UserService) List(req *query.ListQuery) (users []*model.User, err error) {if req.PageSize < 1 {req.PageSize = config.PAGE_SIZE}return srv.Repo.List(req) } func (srv *UserService) GetTotal(req *query.ListQuery) (total int64, err error) {return srv.Repo.GetTotal(req) } func (srv *UserService) Get(user model.User) (*model.User, error) {return srv.Repo.Get(user) } func (srv *UserService) Exist(user model.User) *model.User {return srv.Repo.Exist(user) }func (srv *UserService) ExistByUserID(id string) *model.User {return srv.Repo.ExistByUserID(id) }func (srv *UserService) Add(user model.User) (*model.User, error) {//根據手機號判斷是否存在用戶result := srv.Repo.ExistByMobile(user.Mobile)if result != nil {return nil, errors.New("用戶已經存在")}user.UserId = uuid.NewV4().String()if user.Password == "" {user.Password = utils.Md5("123456")}user.IsDeleted = falseuser.IsLocked = falsereturn srv.Repo.Add(user) } func (srv *UserService) Edit(user model.User) (bool, error) {if user.UserId == "" {return false, fmt.Errorf("參數錯誤")}exist := srv.Repo.ExistByUserID(user.UserId)if exist == nil {return false, errors.New("參數錯誤")}exist.NickName = user.NickNameexist.Mobile = user.Mobileexist.Address = user.Addressreturn srv.Repo.Edit(*exist) } func (srv *UserService) Delete(id string) (bool, error) {if id == "" {return false, errors.New("參數錯誤")}user := srv.ExistByUserID(id)if user == nil {return false, errors.New("參數錯誤")}user.IsDeleted = !user.IsDeletedreturn srv.Repo.Delete(*user) }

one/handler/user.go

import ("github.com/gin-gonic/gin""net/http""one/enum""one/model""one/query""one/resp""one/service" )type UserHandler struct {UserSrv service.UserSrv }func (h *UserHandler) GetEntity(result model.User) resp.User {return resp.User{Id: result.UserId,Key: result.UserId,UserId: result.UserId,NickName: result.NickName,Mobile: result.Mobile,Address: result.Address,IsDeleted: result.IsDeleted,IsLocked: result.IsLocked,} }func (h *UserHandler) UserInfoHandler(c *gin.Context) {entity := resp.Entity{Code: int(enum.OperateFail),Msg: enum.OperateFail.String(),Total: 0,TotalPage: 1,Data: nil,}userId := c.Param("id")if userId == "" {c.JSON(http.StatusInternalServerError, gin.H{"entity": entity})return}u := model.User{UserId: userId,}result, err := h.UserSrv.Get(u)if err != nil {c.JSON(http.StatusInternalServerError, gin.H{"entity": entity})return}r := h.GetEntity(*result)entity = resp.Entity{Code: http.StatusOK,Msg: "OK",Total: 0,TotalPage: 0,Data: r,}c.JSON(http.StatusOK, gin.H{"entity": entity}) }func (h *UserHandler) UserListHandler(c *gin.Context) {var q query.ListQueryentity := resp.Entity{Code: int(enum.OperateFail),Msg: enum.OperateFail.String(),Total: 0,TotalPage: 1,Data: nil,}err := c.ShouldBindQuery(&q)if err != nil {c.JSON(http.StatusInternalServerError, gin.H{"entity": entity})return}list, err := h.UserSrv.List(&q)total, err := h.UserSrv.GetTotal(&q)if err != nil {panic(err)}if q.PageSize == 0 {q.PageSize = 5}ret := int(total) % q.PageSizeret2 := int(total) / q.PageSizetotalPage := 0if ret == 0 {totalPage = ret2} else {totalPage = ret2 + 1}var newList []*resp.Userfor _, item := range list {r := h.GetEntity(*item)newList = append(newList, &r)}entity = resp.Entity{Code: http.StatusOK,Msg: "OK",Total: total,TotalPage: totalPage,Data: newList,}c.JSON(http.StatusOK, gin.H{"entity": entity}) }func (h *UserHandler) AddUserHandler(c *gin.Context) {entity := resp.Entity{Code: int(enum.OperateFail),Msg: enum.OperateFail.String(),Total: 0,Data: nil,}u := model.User{}err := c.ShouldBindJSON(&u)if err != nil {c.JSON(http.StatusOK, gin.H{"entity": entity})return}r, err := h.UserSrv.Add(u)if err != nil {entity.Msg = err.Error()return}if r.UserId == "" {c.JSON(http.StatusOK, gin.H{"entity": entity})return}entity.Code = int(enum.OperateOk)entity.Msg = enum.OperateOk.String()c.JSON(http.StatusOK, gin.H{"entity": entity})}func (h *UserHandler) EditUserHandler(c *gin.Context) {u := model.User{}entity := resp.Entity{Code: int(enum.OperateFail),Msg: enum.OperateFail.String(),Total: 0,Data: nil,}err := c.ShouldBindJSON(&u)if err != nil {c.JSON(http.StatusOK, gin.H{"entity": entity})return}b, err := h.UserSrv.Edit(u)if err != nil {c.JSON(http.StatusOK, gin.H{"entity": entity})return}if b {entity.Code = int(enum.OperateOk)entity.Msg = enum.OperateOk.String()c.JSON(http.StatusOK, gin.H{"entity": entity})}}func (h *UserHandler) DeleteUserHandler(c *gin.Context) {id := c.Param("id")b, err := h.UserSrv.Delete(id)entity := resp.Entity{Code: int(enum.OperateFail),Msg: enum.OperateFail.String(),Total: 0,Data: nil,}if err != nil {c.JSON(http.StatusOK, gin.H{"entity": entity})return}if b {entity.Code = int(enum.OperateOk)entity.Msg = enum.OperateOk.String()c.JSON(http.StatusOK, gin.H{"entity": entity})} }

涉及到的響應實體類、工具類、常量類及路由文件

one/utils/utils.go

import ("crypto/md5""fmt""io""one/config""time" )// Page 分頁 func Page(Limit, Page int) (limit, offset int) {if Limit > 0 {limit = Limit} else {limit = config.PAGE_SIZE}if Page > 0 {offset = (Page - 1) * limit} else {offset = -1}return limit, offset }// Sort 排序 // 默認 created_at desc func Sort(Sort string) (sort string) {if Sort != "" {sort = Sort} else {sort = "create_at desc"}return sort }const TimeLayout = "2006-01-02 15:04:05"var (Local = time.FixedZone("CST", 8*3600) )func GetNow() string {now := time.Now().In(Local).Format(TimeLayout)return now }func TimeFormat(s string) string {result, err := time.ParseInLocation(TimeLayout, s, time.Local)if err != nil {panic(err)}fmt.Println(result)return result.In(Local).Format(TimeLayout)}func Md5(str string) string {w := md5.New()io.WriteString(w, str)md5str := fmt.Sprintf("%x", w.Sum(nil))return md5str }

one/enum/user_enum.go

type ResponseType intconst (OperateOk ResponseType = 200OperateFail ResponseType = 500 )func (p ResponseType) String() string {switch p {case OperateOk:return "Ok"case OperateFail:return "Fail"default:return "UNKNOWN"} }

one/resp/user.go

type User struct {Id string `json:"id"`Key string `json:"key"`UserId string `json:"userId" gorm:"column:user_id"`NickName string `json:"nickName" gorm:"column:nick_name"`Mobile string `json:"mobile" gorm:"column:mobile" binding:"required"`Address string `json:"address" gorm:"column:address"`IsDeleted bool `json:"isDeleted" gorm:"column:is_deleted"`IsLocked bool `json:"isLocked" gorm:"column:is_locked"` }

one/Handler.go

package mainimport ("fmt""github.com/spf13/viper""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/schema""log""one/config""one/handler""one/model""one/repository""one/service" )var (DB *gorm.DBBannerHandler handler.BannerHandlerCategoryHandler handler.CategoryHandlerOrderHandler handler.OrderHandlerProductHandler handler.ProductHandlerUserHandler handler.UserHandler )func initViper() {if err := config.Init(""); err != nil {panic(err)} }func initDB() {fmt.Println("數據庫 init")var err errorconf := &model.DBConf{Host: viper.GetString("database.host"),User: viper.GetString("database.username"),Password: viper.GetString("database.password"),DbName: viper.GetString("database.name"),}config := fmt.Sprintf("%s:%s@tcp(%s)/%s?parseTime=true&charset=utf8&parseTime=%t&loc=%s",conf.User,conf.Password,conf.Host,conf.DbName,true,"Local")DB, err = gorm.Open(mysql.Open(config), &gorm.Config{NamingStrategy: schema.NamingStrategy{//禁用表的復數形式SingularTable: true,},})if err != nil {log.Fatalf("connect error: %v\n", err)}fmt.Println("數據庫 init 結束...") }func initHandler() {UserHandler = handler.UserHandler{UserSrv: &service.UserService{Repo: &repository.UserRepository{DB: DB,},}} }func init() {initViper()initDB()initHandler() }

主啟動類

package mainimport ("github.com/gin-gonic/gin""github.com/spf13/viper""net/http" )func Cors() gin.HandlerFunc {return func(c *gin.Context) {method := c.Request.Methodc.Header("Access-Control-Allow-Origin", "*")c.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token")c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS")c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")c.Header("Access-Control-Allow-Credentials", "true")if method == "OPTIONS" {c.AbortWithStatus(http.StatusNoContent)}// 處理請求c.Next()} }func main() {r := gin.Default()r.Use(Cors())gin.SetMode(viper.GetString("mode"))user := r.Group("/api/user"){user.GET("/list", UserHandler.UserListHandler)user.GET("/info/:id", UserHandler.UserInfoHandler)user.POST("/add", UserHandler.AddUserHandler)user.POST("/edit", UserHandler.EditUserHandler)user.POST("/delete/:id", UserHandler.DeleteUserHandler)}port := viper.GetString("port")r.Run(port) }

啟動

go build main.go Handler.go

小結

上面簡單的實現了一個restfui風格的架構,重在實現思想實現,可能實際運用的時候根據項目的不同有所差異,但是上述的知識基本實現了gin、grom 知識點的整合。

總結

以上是生活随笔為你收集整理的go语言的魔幻旅行38-gin、Gorm整合实现restfui api的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

色婷婷国产精品一区在线观看 | 激情综合五月天 | 亚洲免费不卡 | 99精品国产视频 | 免费av观看 | 国产视频18 | 国产在线观看91 | 精品国产一区二区三区在线观看 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 91人人澡人人爽人人精品 | www.久久com| 亚洲欧洲视频 | 又黄又刺激视频 | 97福利视频 | 中日韩三级视频 | www日日 | 亚洲国产中文在线观看 | 精品一区二区久久久久久久网站 | 五月婷婷综 | 国产又粗又猛又黄又爽视频 | 天天舔天天射天天操 | 成人av电影免费在线播放 | 欧美精品一区二区免费 | 91亚洲视频在线观看 | 三日本三级少妇三级99 | 欧美精品成人在线 | 欧美精品一区二区免费 | 国产精品视频内 | 美女视频永久黄网站免费观看国产 | 美女视频久久 | 免费看一级特黄a大片 | 丝袜制服天堂 | 精品欧美日韩 | 日韩com| 久草在线视频新 | 久久综合免费视频影院 | 欧美精品第一 | 国产又黄又爽又猛视频日本 | 亚洲欧洲精品一区二区 | 日本公妇在线观看 | 日韩av影视在线观看 | 亚洲精品视频偷拍 | 人人舔人人干 | 最近中文字幕第一页 | 五月婷婷国产 | 香蕉久久久久久av成人 | 亚洲欧美视频一区二区三区 | 91传媒在线 | 免费看国产曰批40分钟 | 在线免费观看一区二区三区 | 91在线色 | 日本久久免费电影 | 久久国产精品二国产精品中国洋人 | 免费成人av在线 | 麻豆成人精品视频 | 欧美一区二区三区在线看 | 9ⅰ精品久久久久久久久中文字幕 | 伊人婷婷在线 | 欧美精品二区 | 97人人模人人爽人人喊中文字 | 成人91在线| 一级黄色片在线免费观看 | 日韩3区 | 麻豆精品视频在线 | 日韩一级网站 | 久久精品波多野结衣 | 国产人在线成免费视频 | 国产小视频福利在线 | 久久久精品影视 | 久草在线播放视频 | 亚洲电影图片小说 | www.色五月 | 亚洲精品88欧美一区二区 | 亚洲黄色小说网 | 菠萝菠萝蜜在线播放 | 在线观看网站av | 午夜18视频在线观看 | 亚洲精品一区二区三区高潮 | 粉嫩av一区二区三区入口 | 久久久亚洲影院 | 国产理论免费 | a黄在线观看 | 久久字幕网 | 激情视频免费在线观看 | 国产在线97| 国产福利电影网址 | 亚洲一区二区高潮无套美女 | 夜夜骑首页 | 成年人在线观看免费视频 | 日韩高清免费在线 | 欧美日韩久久久 | 日韩视频一 | 国产一区二区在线观看免费 | 色综合久久五月天 | 国产高清不卡 | 国产九色在线播放九色 | 91成人观看 | 日韩动态视频 | 激情五月婷婷 | 亚洲在线视频观看 | 日韩三级免费 | 国产免费久久av | av一级在线 | 黄色日视频 | 欧美日韩国产精品一区二区三区 | 欧美韩国日本在线观看 | 一区二区三区日韩精品 | www在线免费观看 | 亚洲激色 | 99爱精品视频| 97在线视频免费观看 | 韩国精品一区二区三区六区色诱 | 日韩网站一区二区 | 伊在线视频 | 九九热99视频 | 国产在线观看污片 | 欧美精品一区在线发布 | 欧美在线aa | 免费三及片 | 日韩欧美在线综合网 | 91精品国产成人 | 视频99爱 | 看黄色91 | 中文字幕乱码电影 | 国产又粗又猛又黄 | 国产xxxxx在线观看 | 亚洲午夜精品福利 | 国产精品99久久久久久人免费 | 亚洲区视频在线 | 91视频在线观看下载 | 国产精品视频区 | 99精品视频在线免费观看 | 中文字幕一区二区三区精华液 | 国内精品一区二区 | 欧美日韩大片在线观看 | 欧美大片在线看免费观看 | 中文字幕在线观看免费 | 91豆麻精品91久久久久久 | 久久精品亚洲综合专区 | 毛片a级片 | 国产成人精品免费在线观看 | 国产91精品一区二区麻豆亚洲 | 国产日韩精品视频 | 在线看片日韩 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 精品一区精品二区高清 | 日韩影片在线观看 | 久草视频首页 | 色婷婷久久久综合中文字幕 | 又爽又黄又无遮挡网站动态图 | 久久精品视频观看 | 少妇资源站 | av成年人电影 | 四虎影视国产精品免费久久 | 99r在线视频 | 婷婷久久网站 | 激情黄色一级片 | 色婷婷免费视频 | 五月天,com| 91精品视频一区 | 国产精品激情在线观看 | av黄色免费网站 | 日本乱视频 | 97精品欧美91久久久久久 | 91av免费看 | 国产精品一区二区白浆 | 国产一区在线视频 | 色综合天天综合 | 成人h电影在线观看 | 在线97| 日韩av一区二区三区 | 九九免费在线观看视频 | 久久国语| 久久爱综合| 欧美作爱视频 | 三上悠亚一区二区在线观看 | 免费99精品国产自在在线 | 亚洲一区久久 | 国产午夜精品一区二区三区嫩草 | 国产亚洲日本 | 欧美性生活小视频 | 中文字幕在线字幕中文 | 韩国av免费看 | av黄色在线观看 | 欧美精品一区二区免费 | 国产精品ssss在线亚洲 | 国产五月婷 | 超级碰视频 | 国内精品久久久久久久影视简单 | 99热国内精品 | 国产精品中文字幕在线 | 一区二区三区精品在线视频 | 亚洲午夜电影网 | 一区二区不卡 | 国产二区精品 | 九九色网 | 激情久久一区二区三区 | 一区二区三区手机在线观看 | 中文字幕一区二区三区四区久久 | 香蕉在线观看视频 | 亚洲日韩中文字幕在线播放 | 在线天堂中文在线资源网 | 亚洲2019精品| 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 久久久网站 | 99久久久成人国产精品 | 国产手机视频在线观看 | 国产原厂视频在线观看 | 精品国产诱惑 | 色综合久久久久久久 | 美女网站免费福利视频 | 免费看的黄色小视频 | 亚a在线 | 日韩欧美在线视频一区二区三区 | 久久久综合香蕉尹人综合网 | 久草成人在线 | 免费观看一级视频 | 欧美激情视频一二区 | 久久伊人操 | 六月激情丁香 | 五月婷婷久久丁香 | 欧美日韩中 | 天天射天天操天天 | www.国产视频| 一级片视频在线 | 成人毛片在线观看视频 | 欧洲亚洲精品 | 久草资源在线观看 | 国产精品黑丝在线观看 | 日日夜夜综合网 | 人人澡人人爽欧一区 | 国产麻豆视频免费观看 | 国产乱老熟视频网88av | 国产高清绿奴videos | 亚洲精品视频在线观看免费视频 | 欧美另类调教 | 91成人免费视频 | 成人在线视频你懂的 | 久久久久五月天 | 久久精品黄| 久久9精品 | 国产小视频在线播放 | 天天操天 | 亚洲精品乱码久久久久久蜜桃欧美 | 狠狠躁夜夜av | 91精品影视 | 日韩欧美视频在线播放 | 岛国精品一区二区 | 精品国产精品久久一区免费式 | av在线在线 | 亚洲作爱| 色综合亚洲精品激情狠狠 | 人人插人人澡 | 福利av在线 | 欧美不卡在线 | 美女国产 | 亚洲精品乱码久久久久v最新版 | 精品一区二区三区香蕉蜜桃 | 成人免费观看大片 | 一区二区三区久久 | 亚洲狠狠婷婷 | 国产精品午夜在线 | 国产精品第二十页 | av7777777| 精品色综合 | 日韩伦理片一区二区三区 | 国产黄色精品 | 美国av大片| 麻豆传媒视频在线 | 中文字幕在线视频一区二区三区 | 色偷偷88888欧美精品久久久 | 五月天亚洲综合 | 久久久国产精品一区二区三区 | 日本中文一区二区 | 少妇按摩av | 久久久999精品视频 国产美女免费观看 | 99国内精品久久久久久久 | 亚洲久草网| 国产在线精品二区 | 久久五月激情 | 91自拍视频在线观看 | 五月婷婷视频 | 婷婷色中文字幕 | 国产在线播放观看 | 日韩美精品视频 | 精品久久精品 | 9色在线视频 | 五月婷婷综合在线视频 | 国产精品大尺度 | 欧洲亚洲精品 | 一级特黄av | 美女精品在线观看 | 日韩精品最新在线观看 | 国产精品av免费在线观看 | 亚洲欧美综合 | 500部大龄熟乱视频使用方法 | 亚洲动漫在线观看 | 国产不卡视频 | 91激情在线视频 | 精品天堂av | 在线观看www. | 91爱爱免费观看 | 天天躁天天躁天天躁婷 | 香蕉视频国产在线观看 | 国产99中文字幕 | 欧美日韩国产高清视频 | 特及黄色片 | 亚洲国产综合在线 | 免费一级特黄毛大片 | 精品国产黄色片 | 免费在线观看日韩欧美 | 一区二区久久 | 在线观看亚洲专区 | 中文字幕丰满人伦在线 | 国产另类av| 五月婷婷激情综合 | 久久精品国产一区二区 | 亚洲日日夜夜 | 91色偷偷| 91最新中文字幕 | 日韩在线观看电影 | 99精彩视频在线观看免费 | 国产中文字幕一区二区三区 | 国产精品一区二区三区视频免费 | 91视频免费播放 | 97在线免费| 国产免费成人av | 人人插人人做 | 国内精自线一二区永久 | 又大又硬又黄又爽视频在线观看 | 中文字幕乱视频 | 玖玖玖影院 | 欧美一级电影片 | av黄免费看 | 深夜精品福利 | 国产精品久久久久久久久久久免费看 | 日本视频高清 | 黄a网| 西西444www高清大胆 | 五月婷婷丁香综合 | 久久草在线精品 | 国产福利一区二区在线 | 精品久久久免费 | 亚洲在线日韩 | 国产色女人 | 国产美女被啪进深处喷白浆视频 | 欧美午夜寂寞影院 | 在线视频第一页 | 黄色电影在线免费观看 | 成年人视频免费在线播放 | 国产精品免费一区二区三区 | 91九色蝌蚪视频 | 国产黄色片免费看 | 麻豆一级视频 | 高清中文字幕av | 国产成人黄色片 | 免费看黄在线观看 | 国产精品一区免费看8c0m | 国产视频黄 | 久草香蕉在线 | 欧美另类高潮 | 奇米影视8888在线观看大全免费 | 久久久久久久久国产 | 亚洲精品99久久久久中文字幕 | 热精品| 97香蕉久久超级碰碰高清版 | 欧美国产高清 | 亚洲国产精品成人综合 | 一区二区视频电影在线观看 | 国产激情久久久 | 色婷婷国产 | 波多野结衣一区二区三区中文字幕 | 日韩动态视频 | 99九九免费视频 | 91精品视频免费观看 | 亚洲视频综合在线 | av一级一片 | 正在播放 国产精品 | 亚洲国产成人精品在线观看 | 国内精品国产三级国产aⅴ久 | 国产资源在线免费观看 | 国产成本人视频在线观看 | 天天摸天天舔 | 一区二区三区韩国免费中文网站 | www.久久色.com | 色网站免费在线观看 | 天天透天天插 | 亚洲精品国产拍在线 | 亚洲国内精品在线 | 黄色国产高清 | 亚洲蜜桃av | 国产精品久久久久久久久久久久冷 | 色综合婷婷 | 人人爽人人爽人人片av免 | 五月婷婷视频在线观看 | 黄色软件在线观看视频 | 久草精品视频在线看网站免费 | 久草在线视频免费资源观看 | 欧美成人精品xxx | 波多野结衣电影一区 | 久久久精品在线观看 | 91超在线 | 日本一区二区三区视频在线播放 | av免费看看| 国产区av在线 | 国产久草在线 | 午夜国产福利在线 | 狠狠操电影网 | 日日爽视频| 免费观看第二部31集 | 手机看片中文字幕 | 国产成人在线观看免费 | 91女神的呻吟细腰翘臀美女 | av观看网站| 中日韩在线视频 | 国产精品美女在线 | 麻豆视频免费入口 | 亚洲一级黄色大片 | 久久久久久久久久久电影 | 国产黄色片久久 | 婷婷综合亚洲 | 六月丁香综合 | 92国产精品久久久久首页 | 精品国产精品久久一区免费式 | 一本一道久久a久久精品蜜桃 | 欧美色888 | 91九色精品女同系列 | 黄色视屏在线免费观看 | 天天se天天cao天天干 | 中文字幕观看在线 | 最近日本韩国中文字幕 | 亚洲欧美乱综合图片区小说区 | 久草视频在线免费 | 亚洲午夜精品久久久 | 精品一二区 | 波多野结衣电影一区 | 91九色蝌蚪视频网站 | 久久久久久久久久亚洲精品 | 狠狠干夜夜操 | 日本bbbb摸bbbb | 亚洲中字幕 | 亚洲精品在线观看不卡 | 亚洲免费av电影 | 伊人干综合| 日韩伦理一区二区三区av在线 | 国产色网| 狠狠干电影 | 在线一级片| 99久久激情 | 奇米四色影狠狠爱7777 | 国产二区精品 | 国产又粗又硬又长又爽的视频 | 69久久久久久久 | 国产一级二级在线 | 成人宗合网| 国产91影院 | 国产精品中文字幕在线观看 | 国产四虎在线 | av色图天堂网 | 久久精品国产精品亚洲精品 | 一区二区久久 | 欧美激情综合色综合啪啪五月 | 成人在线播放网站 | 国产婷婷精品av在线 | 在线观看色网站 | 激情偷乱人伦小说视频在线观看 | 欧美成人69av| 丁香婷婷网 | 深夜免费福利在线 | 超碰97人人在线 | 日韩在线视频网站 | 91精品久久久久久久久 | 国产成人av一区二区三区在线观看 | 在线视频一区观看 | wwwwww国产 | 亚洲综合色播 | 亚洲成人资源在线观看 | 日韩综合一区二区三区 | 99精品系列 | 午夜久久久精品 | 国产精品一区二区 91 | 亚洲资源在线观看 | 91爱爱视频 | 亚洲高清国产视频 | 日韩日韩日韩日韩 | 亚洲美女久久 | 视频在线精品 | 亚洲乱码久久久 | 精品国产免费人成在线观看 | 欧美一区二区三区在线 | 亚洲国产精品久久久 | 亚洲精品tv久久久久久久久久 | 又长又大又黑又粗欧美 | 99精品免费久久久久久久久 | 欧美一区二区日韩一区二区 | 久久一区91 | 国产一级一片免费播放放 | 日韩大片在线免费观看 | 国产中文伊人 | 手机在线免费av | 欧美日韩在线观看一区二区三区 | 国产91区 | 久久视频免费看 | 极品久久久久久久 | www.久久精品视频 | 在线观看韩日电影免费 | 日日夜夜天天综合 | 欧美激情精品久久久久久变态 | 国产精品视频免费观看 | 一区二区三区动漫 | 日本中文在线播放 | 亚洲三区在线 | 日韩精品视频在线免费观看 | 久久99精品久久久久久 | 欧洲性视频 | 色在线中文字幕 | 91精品国产自产91精品 | 在线免费观看羞羞视频 | 色国产精品一区在线观看 | 中文视频在线播放 | 中文字幕在线观看一区二区 | 午夜精品一区二区三区在线视频 | 免费av网站观看 | 国产精品久久久久久久久搜平片 | 亚洲一级电影在线观看 | 六月色丁 | 中文字幕91 | 一本一本久久a久久精品综合 | 久久手机精品视频 | 国产手机在线播放 | 久久久久久久久久免费视频 | 成人国产亚洲 | 国产99在线播放 | 久久久国产99久久国产一 | 国产xxxx | 一级黄色电影网站 | 国产亚洲在线 | 色偷偷av男人天堂 | 亚洲国产影院 | 久久久久久久久久久久久久av | 久久免费黄色大片 | 操操操人人 | 日本美女xx | 色天天天| 欧美男同网站 | 81国产精品久久久久久久久久 | 欧美999| 天天做天天看 | 正在播放国产一区 | 久久99精品久久久久久三级 | 亚洲视频专区在线 | 国产色网站 | 国产精品嫩草在线 | 久久99精品久久久久蜜臀 | 91看片麻豆 | 在线观看 国产 | 国产免费久久av | 国产精品色婷婷视频 | 国产成人黄色网址 | 国产一级免费在线观看 | 日韩色一区二区三区 | 香蕉影视| 国产 在线观看 | 免费黄色av. | 中文在线字幕免费观看 | 国产中文字幕视频在线观看 | 免费亚洲视频在线观看 | 久久精品123 | 粉嫩av一区二区三区四区在线观看 | 天堂av在线免费观看 | 国产精品igao视频网入口 | 亚洲国产合集 | 中文字幕一区二区三区乱码不卡 | 五月婷婷综合激情 | 亚洲一级二级 | 国产精品去看片 | 国产一级一片免费播放放 | 91精品国产网站 | 欧美综合久久 | 国产精品久久久久久久久久免费 | 精品国偷自产在线 | 日韩美女免费线视频 | 久久免费视频观看 | 成人av中文字幕在线观看 | 免费黄色看片 | 国产精品福利午夜在线观看 | 青春草视频在线播放 | 中文字幕亚洲精品日韩 | 欧美9999| www视频免费在线观看 | 国产不卡精品视频 | 青春草视频在线播放 | 国产精品区二区三区日本 | 中文 一区二区 | 麻豆播放| 亚洲精品免费在线观看视频 | 黄色在线成人 | 色综合久久久久久中文网 | 久久综合五月婷婷 | 久草在线一免费新视频 | 2021国产在线 | av电影一区二区三区 | 99精品在线直播 | 亚洲精品国 | 国产日韩欧美在线观看视频 | 精品视频免费看 | 国产精品美女毛片真酒店 | 日韩成年视频 | 日韩字幕| 久久午夜羞羞影院 | 黄色网在线免费观看 | 极品久久久 | 免费黄色网止 | 日日爱av | 国产精品久久99精品毛片三a | www.国产精品 | 成人va在线观看 | 一区二区三区国产欧美 | 免费在线视频一区二区 | 一级一级一片免费 | 麻豆一区在线观看 | 黄色网大全 | 日韩av电影网站在线观看 | 久久精品日本啪啪涩涩 | 在线看不卡av | 999久久久久久久久久久 | 91精品国产成人www | 九色视频网 | 成人久久18免费网站图片 | 91传媒激情理伦片 | 久久免费美女视频 | 亚洲精选国产 | 国产午夜精品久久 | 亚洲国产午夜 | 欧美视频网址 | 夜添久久精品亚洲国产精品 | 九色在线视频 | 免费在线观看av网站 | 麻豆免费视频观看 | 最近久乱中文字幕 | 久久精品视频中文字幕 | www操操| 日韩av成人在线 | www.香蕉视频在线观看 | 91在线视频网址 | 天天综合91 | 国产精品破处视频 | 午夜12点 | 黄色综合 | 在线观看精品视频 | 91在线视频观看 | 国产黄色精品在线 | 国产精品久久久久久久毛片 | 国产999精品久久久影片官网 | 亚洲精品成人av在线 | 六月天综合网 | www.com黄色 | 精品一二区 | 在线视频精品 | 91精品老司机久久一区啪 | 国产黄色一级大片 | 1000部18岁以下禁看视频 | 日本3级在线观看 | 成人久久18免费 | 黄色一级网 | 日韩欧美在线中文字幕 | 草久久久久久久 | 99视频在线观看视频 | 日本黄色a级大片 | 免费国产一区二区视频 | 成年人天堂com | 亚洲国产美女精品久久久久∴ | 亚洲最大的av网站 | 成人久久18免费网站麻豆 | 99 视频 高清 | 久久狠狠亚洲综合 | 韩国av免费在线观看 | 久久成人国产精品一区二区 | 色噜噜色噜噜 | 精品一区二区三区久久 | 日韩女同av | 美女网站视频免费黄 | 黄色大片av | 久久综合成人 | 亚洲精品美女久久 | 国产精品久久电影观看 | 日韩久久久久久 | 天天干 夜夜操 | 男女日麻批 | 一级黄色片在线免费看 | 狠狠的操你 | 欧美精品久久久久久久久久丰满 | 日韩大片在线免费观看 | 日韩精品不卡在线观看 | 中文在线天堂资源 | 国产高清无线码2021 | 国产又粗又硬又爽的视频 | 色综合久久88色综合天天免费 | 亚洲视频1区2区 | a级国产毛片 | 精品成人国产 | 精品国产一区二区三区不卡 | 色综合久久中文字幕综合网 | 天天色视频 | 久久九九久久 | 国产99久久久国产精品免费二区 | 92中文资源在线 | 亚洲欧洲av| 91在线免费播放视频 | 亚洲精品国产麻豆 | 欧美日韩一级久久久久久免费看 | 亚洲永久精品一区 | 成人久久免费视频 | 天天爽网站 | 99热九九这里只有精品10 | 久久久久女人精品毛片 | 国产精品资源在线观看 | 日本高清久久久 | 国产护士在线 | 久久在线免费观看 | av手机版 | 久久一线 | 色www精品视频在线观看 | 日韩午夜电影 | 园产精品久久久久久久7电影 | 成年人在线观看免费视频 | 亚洲精品一区二区精华 | 91精品国产一区二区在线观看 | 96久久欧美麻豆网站 | 国内精品久久久久久久 | 中文字幕中文字幕在线中文字幕三区 | 天堂v中文 | 欧美日韩免费一区二区三区 | 91福利社在线观看 | 久久免费国产精品 | 99精品视频免费观看 | 日b视频国产 | 免费黄色在线网站 | av电影在线播放 | 婷婷在线播放 | 日韩高清激情 | 精品久久久久久综合日本 | 2017狠狠干| 精品国产一区二区三区蜜臀 | 欧美va在线观看 | 中文字幕永久在线 | 久久9999久久| 深夜福利视频在线观看 | 日韩精品视频免费专区在线播放 | 福利视频网站 | 国产精品久久久久久久久软件 | 国产精品一区免费观看 | 国产不卡高清 | 免费高清在线观看电视网站 | 国产精品久久一区二区三区, | 欧美一二三区在线观看 | 黄色免费观看视频 | 日韩三级精品 | 亚洲国产av精品毛片鲁大师 | 91视频免费看片 | 91污在线 | 91丨九色丨国产在线观看 | 精品国产免费看 | 日韩在线电影一区二区 | 久久99国产精品免费 | 17videosex性欧美| 在线视频欧美精品 | 亚洲少妇xxxx| 99国产精品久久久久久久久久 | av在线免费观看黄 | 天堂素人在线 | 国产精品久久久久久久久久久久久久 | 国产香蕉久久精品综合网 | 久久你懂的 | 人人看人人艹 | 超碰人人干人人 | 亚洲精品国偷自产在线99热 | 久久久久久久久久伊人 | 婷婷久久五月天 | 日日草天天草 | 日韩在线免费不卡 | 国产一区二区高清不卡 | 亚洲自拍av在线 | 精品国产_亚洲人成在线 | 韩国在线一区二区 | 午夜私人影院久久久久 | 亚洲专区在线视频 | 很黄很污的视频网站 | 久久人人爽人人爽人人 | 亚洲影视资源 | 91精品系列 | 亚洲一区二区视频在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 五月婷婷香蕉 | 黄色片网站 | 国产黄色大片 | 特黄特色特刺激视频免费播放 | 黄色的网站免费看 | 久久国产精品一区二区三区 | 一区二区不卡视频在线观看 | 午夜影视av | 日韩亚洲在线观看 | 五月婷婷六月综合 | 天天干,天天射,天天操,天天摸 | 一区 二区 精品 | 欧美日韩久久不卡 | 欧美韩国日本在线观看 | 香蕉网站在线观看 | 九九免费视频 | 国产亚洲精品久久久久久久久久 | a级一a一级在线观看 | 四虎国产精品成人免费4hu | 黄色一级片视频 | 日韩av不卡播放 | 色婷婷综合久久久久 | 精品国产一区二区三区久久久 | 久久人视频 | 亚洲视频网站在线观看 | 国产精品毛片一区二区在线看 | 国产中文字幕视频 | 91av视频在线播放 | 悠悠av资源片 | www.香蕉| 97综合视频| 久久久人人爽 | 成人福利在线 | 久久久久久久久久久影院 | 一区二区视频在线播放 | 久久免费播放视频 | 天天爱av导航 | 人人澡人人舔 | 丁香久久五月 | 久久99久久99精品免视看婷婷 | 日韩欧美精品免费 | 欧美在线aa | 久久久国产精品一区二区三区 | 国产啊v在线 | 91麻豆精品国产91久久久无限制版 | 人人超碰在线 | 欧美一区在线观看视频 | 国产69精品久久99不卡的观看体验 | 中文一区在线观看 | 亚洲精品国产精品国 | 一区二区不卡视频在线观看 | 久久涩涩网站 | 国产一区二区不卡在线 | 99热这里只有精品国产首页 | 欧美一区二区三区在线播放 | 婷婷久久国产 | 人人超碰97| 99精品久久久久久久 | 精品国产一区二区三区久久影院 | 青青河边草免费观看 | 免费看亚洲毛片 | 97超碰人人澡人人 | 日韩精品免费一线在线观看 | 日韩久久午夜一级啪啪 | 亚洲精品国产精品国 | 69精品| 免费观看一区二区三区视频 | 亚洲欧美精品在线 | 久久久久久久久久影院 | 精品美女在线视频 | 91精品国产自产在线观看永久 | 天天干,天天操,天天射 | 日韩 精品 一区 国产 麻豆 | 国产精品不卡 | 99久久这里只有精品 | 久久国产剧场电影 | 在线天堂v | 亚洲视频99| 国产精品久久久久免费 | 国产美腿白丝袜足在线av | 91福利小视频 | www.婷婷com| 国产 成人 久久 | 在线不卡中文字幕播放 | 在线观看爱爱视频 | 亚洲免费国产视频 | 亚洲视频中文 | 亚洲精品国产精品国自产 | 成人啊 v| 国产亚洲在 | 亚一亚二国产专区 | 欧美日韩精品在线免费观看 | www狠狠操 | 97在线影院| 97精品超碰一区二区三区 | 久久久久久蜜av免费网站 | 天天操天天干天天综合网 | 国产aaa大片 | 婷婷丁香六月 | 区一区二区三在线观看 | 99久久日韩精品免费热麻豆美女 | 色噜噜狠狠狠狠色综合 | 久久不卡日韩美女 | 日日日操操 | 日韩一片| 欧美日韩免费在线观看视频 | 色黄久久久久久 | 国产一区在线视频观看 | 日韩av一区二区在线 | 中文字幕 国产视频 | 亚洲精品在线网站 | 婷婷播播网 | 成人蜜桃视频 | 久久激情五月激情 | 久久久免费精品国产一区二区 | 81国产精品久久久久久久久久 | 98超碰人人 | 婷婷色婷婷 | 91精品国产麻豆 | 97精品国产aⅴ | 日韩精品一区二区三区免费视频观看 | 日韩动漫免费观看高清完整版在线观看 | 亚洲经典视频 | 青春草国产视频 | 看毛片网站| 亚洲免费永久精品国产 | 国产亚洲精品久久久久秋 | 色中色亚洲 | 全久久久久久久久久久电影 | 欧美a级成人淫片免费看 | 亚洲精选国产 | 国语自产偷拍精品视频偷 | 91成人精品一区在线播放69 | 青草视频在线免费 | 免费在线观看av网站 | 人人精品久久 | 久久久久久久久久久久久国产精品 | 国产高清在线观看 | 国产第一页在线观看 | 国产无套精品久久久久久 | 91tv国产成人福利 | 亚洲欧洲精品视频 | 日本电影黄色 | 国产成人久久精品亚洲 | 夜夜干天天操 | 深夜成人av| 亚洲国产精品小视频 | 精品久久精品 | 中文字幕在线看视频国产中文版 | 国产原厂视频在线观看 | 免费电影一区二区三区 | 中文字幕av免费在线观看 | 97成人资源站 | 亚洲成人中文在线 | 中文字幕免费成人 | 精品国产成人在线影院 | а天堂中文最新一区二区三区 | 青青草久草在线 | 久久久精华网 | 欧美在线日韩在线 | 日本在线h | 在线观看网站av | 欧美一区二区三区在线播放 | 97在线观看免费观看高清 | 国产一区二区高清 | 成人免费观看完整版电影 | 97视频播放 | 免费观看的av网站 | 国产一级二级三级视频 | 91精品国产麻豆国产自产影视 | 婷婷五月情 | 在线免费三级 | 国产精品99久久99久久久二8 | 久久公开免费视频 | 国产精品va在线 | 精壮的侍卫呻吟h | 日韩综合一区二区三区 | 久久精品小视频 | 激情中文在线 | 国产一级a毛片视频爆浆 | 在线看毛片网站 | 亚洲精品一区二区18漫画 | 日日骑 | 成人免费共享视频 | 欧美久久久 | 亚洲九九九在线观看 | 97超碰人人澡人人爱 | 欧美一级免费在线 | 99热99re6国产在线播放 | 成人 亚洲 欧美 | 国产三级久久久 | 日本精品一 | 91av在线看 | 国产精品96久久久久久吹潮 | 色久av | 国产精品网红直播 | 97在线精品视频 | 偷拍福利视频一区二区三区 | 麻豆一区二区三区视频 | 国产日韩欧美在线播放 | av成人在线观看 | 中文字幕在线观看免费高清电影 | 超碰97久久 | 国产美女免费观看 | 97av影院 |