当前位置: 首页 > news >正文

网站建设中页面模板下载江苏建设电子信息网站

网站建设中页面模板下载,江苏建设电子信息网站,如何制作产品网站模板,老网站做成适合手机端的网站怎么做使用Gin-Vue- Admin框架手动实现crud 在gva框架下自己手动实现一个CRUD的操作#xff0c;该操作将会结合gen进行探讨学习#xff0c;具体实现可以看下面代码的实现#xff0c;项目目录层级分为api层#xff0c;service层#xff0c;model层#xff0c;common层#xff…使用Gin-Vue- Admin框架手动实现crud 在gva框架下自己手动实现一个CRUD的操作该操作将会结合gen进行探讨学习具体实现可以看下面代码的实现项目目录层级分为api层service层model层common层router层gen层。 我的这个实现方式有些许不太一样就是我的修改并非传统的restful风格通过json方式进行传递这个id也确保安全所以这里的请求我不会用Get请求。 创建一个Banner 在gva下的server文件夹中找到plugin文件然后在这里创建一个banner文件夹我们的手动CRUD实现的代码就放置在这里查看项目目录结构banner包的路径是/server/plugin/banner。 model层 在model层中我们分为前端请求的参数request以及后端返回的只response。在我们的model下会有一个创建表的结构体也就是对应数据库字段的一个struct banner的结构体 package modelimport github.com/flipped-aurora/gin-vue-admin/server/globaltype Banner struct {global.GVA_MODELUrl string json:url gorm:column:url;comment:图片地址Path string json:path gorm:column:path;comment:轮播图跳转地址Description string json:description gorm:column:description;comment:轮播介绍 } model.request层 用于接收前端的参数 package requestimport (github.com/flipped-aurora/gin-vue-admin/server/plugin/banner/commongithub.com/flipped-aurora/gin-vue-admin/server/plugin/banner/modelgithub.com/flipped-aurora/gin-vue-admin/server/plugin/banner/model/daogorm.io/gen )type BannerList struct {common.PageInfoUrl string json:url gorm:column:url;comment:图片地址Path string json:path gorm:column:path;comment:轮播图跳转地址Description string json:description gorm:column:description;comment:轮播介绍 }func (r BannerList) BannerList() model.Banner {return model.Banner{Url: r.Url,Path: r.Path,Description: r.Description,} }type BannerCreate struct {Url string json:url gorm:column:url;comment:图片地址Path string json:path gorm:column:path;comment:轮播图跳转地址Description string json:description gorm:column:description;comment:轮播介绍 }func (r BannerCreate) BannerCreate() model.Banner {return model.Banner{Url: r.Url,Path: r.Path,Description: r.Description,} }type BannerUpdate struct {common.GetByIdUrl string json:url gorm:column:url;comment:图片地址Path string json:path gorm:column:path;comment:轮播图跳转地址Description string json:description gorm:column:description;comment:轮播介绍 }func (r BannerUpdate) BannerUpdate() model.Banner {return model.Banner{Url: r.Url,Path: r.Path,Description: r.Description,} }func (r *BannerList) Search() common.GenScopes {return func(tx gen.Dao) gen.Dao {if r.Url ! {tx tx.Where(dao.Banner.Url.Eq(r.Url))}if r.Path ! {tx tx.Where(dao.Banner.Path.Eq(r.Path))}if r.Description ! {tx tx.Where(dao.Banner.Description.Eq(r.Description))}return tx} }model.response 返回给前端的一个模型 package responsetype Banner struct {Url string json:url gorm:column:url;comment:图片地址Path string json:path gorm:column:path;comment:轮播图跳转地址Description string json:description gorm:column:description;comment:轮播介绍 }gen层 可以查看gorm的gen的使用文档地址https://gorm.io/gen/ 具体详细的看gorm的文档地址关于gen的相关使用可以看目录结构我的文件存放地 gen是基于gorm封装的在我们最后的banner/main.go中需要装配一下传入db,判断有没有db没有db的调用需要传入db。 $ go get -u gorm.io/gen package mainimport (github.com/flipped-aurora/gin-vue-admin/server/plugin/banner/modelospath/filepathgorm.io/gen )// generate code func main() {// 获取当前文件夹路径pwd, _ : os.Getwd()g : gen.NewGenerator(gen.Config{// 文件输出的位置根据自己的情况而定OutPath: filepath.Join(pwd, plugin, banner, model, dao),// 输出的文件名OutFile: query.go,// 输出模式Mode: gen.WithDefaultQuery | gen.WithQueryInterface,FieldCoverable: true,WithUnitTest: false,})// 挂在自己的结构体在这里根据自己的业务而定g.ApplyBasic(new(model.Banner),)g.Execute() }common层 common层一般是放置一些公共资源需要使用的比如一些返回信息雪花算法生成id等。 common.common.go package commonimport (gorm.io/gen )type GetById struct {ID uint json:id form:id }type GetByIds struct {IDs []uint json:ids form:ids }// PageInfo 分页字段 type PageInfo struct {Page int json:page form:page // 页码PageSize int json:pageSize form:pageSize // 每页大小Keyword string json:keyword form:keyword //关键字 }// 分页函数 func (c *PageInfo) Paginate() func(tx gen.Dao) gen.Dao {return func(tx gen.Dao) gen.Dao {switch {case c.PageSize 100:c.PageSize 100case c.PageSize 0:c.PageSize 10}offset : (c.Page - 1) * c.PageSizereturn tx.Offset(offset).Limit(c.PageSize)} }type GenScopes func(tx gen.Dao) gen.Dao// 前端传什么返回什么 type PageResult struct {PageInfoList interface{} json:list swaggertype:string example:interface 数据Count int64 json:count swaggertype:string example:int64 总数 }// list 返回函数 func NewPageResult(list interface{}, count int64, pageInfo PageInfo) PageResult {if list nil {return PageResult{PageInfo: PageInfo{Page: pageInfo.Page,PageSize: pageInfo.PageSize,},List: []struct{}{},Count: count,}}return PageResult{PageInfo: PageInfo{Page: pageInfo.Page,PageSize: pageInfo.PageSize,},List: list,Count: count,} }common.message.go 存放返回信息还可以自定义一些返回状态码 package commonconst (SuccessCreate 创建成功ErrorCreate 创建失败SuccessUpdate 更新成功ErrorUpdate 更新失败SuccessDelete 删除成功ErrorDelete 删除失败SuccessDeletes 批量删除成功ErrorDeletes 批量删除失败SuccessFirst 查询一条成功ErrorFirst 查询一条失败SuccessList 查询成功ErrorList 查询失败ErrorCount 查询条数失败ErrorRequest 参数有误SuccessServer 服务端返回成功ErrorServer 服务端返回失败 )service层 这里我一般是用于业务处理。 service.banner.go package serviceimport (contextgithub.com/flipped-aurora/gin-vue-admin/server/plugin/banner/commongithub.com/flipped-aurora/gin-vue-admin/server/plugin/banner/modelgithub.com/flipped-aurora/gin-vue-admin/server/plugin/banner/model/daogithub.com/flipped-aurora/gin-vue-admin/server/plugin/banner/model/requestgithub.com/pkg/errors )var Banner new(banner)type banner struct{}// List 查询多条 func (b *banner) List(ctx context.Context, info request.BannerList) (entity []*model.Banner, count int64, err error) {query : dao.Q.WithContext(ctx).Bannerquery query.Scopes(info.Search())count, err query.Count()if err ! nil {return nil, 0, errors.Wrap(err, common.ErrorList)}entity, err query.Scopes(info.Paginate()).Find()if err ! nil {return nil, 0, errors.Wrap(err, common.ErrorCount)}return entity, count, nil }// First 查询单条 func (b *banner) First(ctx context.Context, info common.GetById) (entity *model.Banner, err error) {query : dao.Q.WithContext(ctx).Bannerentity, err query.Where(dao.Banner.ID.Eq(info.ID)).First()if err ! nil {return nil, errors.Wrap(err, common.ErrorFirst)}return entity, nil }// Create 新增 func (b *banner) Create(ctx context.Context, info request.BannerCreate) error {create : info.BannerCreate()query : dao.Q.WithContext(ctx).Bannererr : query.Create(create)if err ! nil {return errors.Wrap(err, common.ErrorCreate)}return nil }// Update 修改 func (b *banner) Update(ctx context.Context, info request.BannerUpdate) error {update : info.BannerUpdate()query : dao.Q.WithContext(ctx).Banner_, err : query.Where(dao.Banner.ID.Eq(info.ID)).Updates(update)if err ! nil {return errors.Wrap(err, common.ErrorUpdate)}return nil }// Delete 单个删除 func (b banner) Delete(ctx context.Context, info common.GetById) error {query : dao.Q.WithContext(ctx).Banner_, err : query.Where(dao.Banner.ID.Eq(info.ID)).Delete()if err ! nil {return errors.Wrap(err, common.ErrorDelete)}return nil }// Deletes 批量删除 func (b *banner) Deletes(ctx context.Context, info common.GetByIds) error {query : dao.Q.WithContext(ctx).Banner_, err : query.Where(dao.Banner.ID.In(info.IDs...)).Delete()if err ! nil {return errors.Wrap(err, common.ErrorDeletes)}return nil }api层 这里我一般是处理接受前端的请求 api.banner.go 这里与service.banner.go的接口一一对应 package apiimport (github.com/flipped-aurora/gin-vue-admin/server/plugin/banner/commongithub.com/flipped-aurora/gin-vue-admin/server/plugin/banner/model/requestgithub.com/flipped-aurora/gin-vue-admin/server/plugin/banner/responsegithub.com/flipped-aurora/gin-vue-admin/server/plugin/banner/servicegithub.com/gin-gonic/ginnet/http )var Banner new(banner)type banner struct{}func (b banner) List(c *gin.Context) response.Response {var list request.BannerListerr : c.ShouldBindJSON(list)if err ! nil {return response.Response{Code: http.StatusPaymentRequired, Message: common.ErrorRequest}}lists, count, err : service.Banner.List(c.Request.Context(), list)if err ! nil {return response.Response{Code: http.StatusInternalServerError, Message: common.ErrorServer}}return response.Response{Code: http.StatusOK,Data: common.NewPageResult(lists, count, list.PageInfo),Message: common.SuccessList,} }func (b *banner) First(c *gin.Context) response.Response {var info common.GetByIderr : c.ShouldBindJSON(info)if err ! nil {return response.Response{Code: http.StatusPaymentRequired, Message: common.ErrorRequest}}data, err : service.Banner.First(c.Request.Context(), info)if err ! nil {return response.Response{Code: http.StatusInternalServerError, Message: common.ErrorServer}}return response.Response{Code: http.StatusOK,Data: data,Message: common.SuccessFirst,} }func (b *banner) Create(c *gin.Context) response.Response {var create request.BannerCreateerr : c.ShouldBindJSON(create)if err ! nil {return response.Response{Code: http.StatusPaymentRequired, Message: common.ErrorRequest}}err service.Banner.Create(c.Request.Context(), create)if err ! nil {return response.Response{Code: http.StatusInternalServerError, Message: common.ErrorCreate}}return response.Response{Code: http.StatusOK, Message: common.SuccessCreate} }func (b *banner) Update(c *gin.Context) response.Response {var update request.BannerUpdateerr : c.ShouldBindJSON(update)if err ! nil {return response.Response{Code: http.StatusPaymentRequired, Message: common.ErrorRequest}}err service.Banner.Update(c.Request.Context(), update)if err ! nil {return response.Response{Code: http.StatusInternalServerError, Message: common.ErrorUpdate}}return response.Response{Code: http.StatusOK, Message: common.SuccessUpdate} }func (b *banner) Delete(c *gin.Context) response.Response {var info common.GetByIderr : c.ShouldBindJSON(info)if err ! nil {return response.Response{Code: http.StatusPaymentRequired, Message: common.ErrorRequest}}err service.Banner.Delete(c.Request.Context(), info)if err ! nil {return response.Response{Code: http.StatusInternalServerError, Message: common.ErrorDelete}}return response.Response{Code: http.StatusOK, Message: common.SuccessDelete} }func (b *banner) Deletes(c *gin.Context) response.Response {var info common.GetByIdserr : c.ShouldBindJSON(info)if err ! nil {return response.Response{Code: http.StatusPaymentRequired, Message: common.ErrorRequest}}err service.Banner.Deletes(c.Request.Context(), info)if err ! nil {return response.Response{Code: http.StatusInternalServerError, Message: common.ErrorDeletes}}return response.Response{Code: http.StatusOK, Message: common.SuccessDeletes} }router层 这里是路由注册的地方 router.router.go package routerimport (github.com/flipped-aurora/gin-vue-admin/server/middlewaregithub.com/flipped-aurora/gin-vue-admin/server/plugin/banner/apigithub.com/flipped-aurora/gin-vue-admin/server/plugin/banner/responsegithub.com/gin-gonic/gin )type Banner struct {router *gin.RouterGroup }func NewBanner(router *gin.RouterGroup) *Banner {return Banner{router} }func (r Banner) Init() {group : r.router.Group(banner){ // 不带日志中间件group.POST(list, response.Handler()(api.Banner.List))group.POST(first, response.Handler()(api.Banner.First))}{ // 带日志中间件group.Use(middleware.OperationRecord())group.POST(create, response.Handler()(api.Banner.Create))group.PUT(update, response.Handler()(api.Banner.Update))group.DELETE(delete, response.Handler()(api.Banner.Delete))group.DELETE(deletes, response.Handler()(api.Banner.Deletes))} }banner/main.go package bannerimport (github.com/flipped-aurora/gin-vue-admin/server/globalgithub.com/flipped-aurora/gin-vue-admin/server/plugin/banner/model/daogithub.com/flipped-aurora/gin-vue-admin/server/plugin/banner/routergithub.com/gin-gonic/gin )var Plugin new(plugin)type plugin struct{}func (p plugin) Register(group *gin.RouterGroup) {router.NewBanner(group).Init()// 这里需要自动装配一下调用dbif global.GVA_DB ! nil {dao.SetDefault(global.GVA_DB)} }func (p plugin) RouterPath() string {return }
http://www.dnsts.com.cn/news/232643.html

相关文章:

  • 网站建设官网型好呢还是商城型三亚8名男女深夜被抓
  • 中企动力网站建设 长春阿里巴巴网站建设策略调研
  • 用html表格做的网站开电商有哪些步骤
  • 2003访问网站提示输入用户名密码网站推广软件免费版
  • 企业网站建设需要哪些资料重庆中小企业名录
  • 域名购买网站有哪些百度seo引流怎么做
  • 城市规划做底图的网站网站建设三站合一微信小程序
  • 万盛网站建设网架钢构公司
  • 网站平台搭建要多少市场调研报告ppt模板
  • 铜官山区建设局网站站长之家权重
  • 手机和wap网站建设什么是企业网站
  • phpcms获取网站名称企业域名是什么意思
  • 凡客诚品网站wordpress重新安装插件
  • 如何设计优秀的公司网站企业网站设计推广方案
  • 网站策划书包括哪些内容如何做好集团网站建设
  • 网站建设构成技术要求淘宝店铺代运营一般怎么收费
  • 仪征市城乡建设局网站珠宝首饰网站源码
  • 杭州网站seo公司sem推广软件
  • 网页设计网站怎么做开发一个软件能卖多少钱
  • 2019年做网站厦门网络推广建网站
  • 郑州网站营销推广广州万户网络
  • 网站域名不想实名认证怎么建自己公司网站
  • 怎么做淘宝客手机网站乐清网站网络公司
  • 域名备案怎么关闭网站吗wordpress 输出 文本
  • wordpress网站不显示系列谷歌怎么建网站
  • 建筑企业管理咨询公司是做什么的个人怎么做网站排名优化
  • 秦皇岛网站建设报价杭州微网站开发公司电话
  • 银川商城网站建设金华专业网站建设公司
  • 商城网站 搭建iis如何做网站管理器
  • 北京企业网站模板建站怎么用wordpress单页淘宝客主题