Gin Web Framework part 5

Gin Web Framework part 5

Gin Web Framework part 5درود دوستان امروز میخوام در مورد بخش پنجم از سری مقالات فرم ورک Gin صحبت کنیمفهرست بخش پنجم از این مقالهControlling Log output coloringModel binding and validationCustom ValidatorsOnly Bind Query StringBind Uriمیریم واسه توضیح هر بخشاگه میخواید لاگ های که توی کنسول می افته رنگی باشه از کد زیر ابتدای فایل اصلی gin.ForceConsoleColor()و اگر می خواید غیر فعال شه کد زیرgin.DisableConsoleColor()این فرم ورک از استانداردهای همچون JSON, XML, YAML پشتیبانی می کند و از کتابخانه validator برای اعتبار سنجی استفاده می کند.همچنین این فرم ورک دو روش برای bind کردن دارهاستفاده از متد های Bind​ , ​ BindJSON​ , ​ BindXML​ , ​ BindQuery​ , ​ BindYAML​ , ​ BindHeaderنحوه رفتار به این صورت هست اگر در درخواست ما خطای وجود داشته باشد با استفاده از c.AbortWithError(400,err).SetType(ErrorTypeBind)​ اون خطار رو توی هدر Content-Type​ ​ text/plain; charset=utf-8 ارسال می کند.روش Type – Should bindاستفاده از متدهای ShouldBind​,ShouldBindJSON​,ShouldBindXML​,ShouldBindQuery​,ShouldBindYAML​,ShouldBindHeaderاگر خطای در درخواست وجود داشته باشد، خطا برمی گردد و این توسعه دهنده است که مسئولیت رسیدگی مناسب به درخواست و خطا رو دارد. .و هنگام استفاده از این روش ، جین سعی می کند بسته به عنوان نوع محتوا ، هدر را ست کند.به تک کد زیر توجه کنیدtype Login struct {
User string `form:&quotuser&quot json:&quotuser&quot xml:&quotuser&quot binding:&quotrequired&quot`
Password string `form:&quotpassword&quot json:&quotpassword&quot xml:&quotpassword&quot binding:&quotrequired&quot`
}در کد بالا ما یه struct تعریف کردیم با دو فیلد از نوع string که هر دو ویژگی ساختار XML و JSON رو دارند که توی کد فوق مشخص کردیم و نوع اعتبارسنجی برای هردو فیلد رو اجباری کردیم.اگه میخواید خروجی JSON بگیرید کد زیرrouter.POST(&quot/loginJSON&quot, func(c *gin.Context) {
var json Login
if err := c.ShouldBindJSON(&json); err != nil {
c.JSON(http.StatusBadRequest, gin.H{&quoterror&quot: err.Error()
})
return
}
if json.User != &quotmanu&quot || json.Password != &quot123&quot {
c.JSON(http.StatusUnauthorized, gin.H{&quotstatus&quot: &quotunauthorized&quot})
return
}
c.JSON(http.StatusOK, gin.H{&quotstatus&quot: &quotyou are logged in&quot})
})با استفاده از متد ShouldBindJSON میاد ساختار JSON رو چک می کند اگر ساختار JSON اشباه بود توی خط چهارم خطای از نوع کد StatusBadRequest بر میگردونه و اما اگر دورست بود توی خط ۱۲ پیغام مناسب به همراه کد StatusOK رو برمی گردونه و اگر اشتباه بود توی خط نه این مورد رو مشخص کردیم.اما اگر برای ساختار XMLبود بجای این تابع ShouldBindJSON تابعShouldBindXML رو جایگزین کنیدنحوه اعتبار سنجی سفارشیpackage main
import (
&quotnet/http&quot
&quottime&quot
&quotgithub.com/gin-gonic/gin&quot
&quotgithub.com/gin-gonic/gin/binding&quot
&quotgithub.com/go-playground/validator/v10&quot
)
type Booking struct {
CheckIn time.Time `form:&quotcheck_in&quot binding:&quotrequired,bookabledate&quot time_format:&quot2006-01-02&quot`
CheckOut time.Time `form:&quotcheck_out&quot binding:&quotrequired,gtfield=CheckIn&quot time_format:&quot2006-01-02&quot`
}
var bookableDate validator.Func = func(fl validator.FieldLevel) bool {
date, ok := fl.Field().Interface().(time.Time)
if ok {
today := time.Now()
if today.After(date) {
return false
}
}
return true
}
func main() {
route := gin.Default()
if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
v.RegisterValidation(&quotbookabledate&quot, bookableDate)
}
route.GET(&quot/bookable&quot, getBookable) route.Run(&quot:8085&quot)
}خوب توی خط ۹ ما یه ساختار تعریف کردیم و توی خط ۱۵ تا ۲۴ اومدبم اعتبارسنجی خودمون رو دورس کردیم برای این کار ما نیاز به کتابخونه اصلی داریم که توی خط ۷ تعریف کردیم و توی تابع اعتبار سنجی خودمون تعریف کردیم این تایع اعتباری سنجی ما توی خط ۲۸ می باشد به نام bookableDateیه زمانی هست که می خوای اطلاعات رو به صورت رشته توی کنسول نشون بدی و به صورت جزيی یعنی فرض کن یه ساختار داری با ۱۵ تا فیلد ولی فقط دو تاش رو میخوای که توی خط ۴و ۵ نشون دادیمvar person Person
if c.ShouldBindQuery(&person) == nil {
log.Println(&quot====== Only Bind By Query String ======&quot)
log.Println(person.Name)
log.Println(person.Address)
}

Author: admin

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *