beego - 매개변수 가져오기

6294 단어

1. 매개변수 가져오기


Google은 Get, POST 등 사용자가 전달하는 데이터를 자주 가져와야 합니다. beego에서 이 데이터를 자동으로 해석합니다. 다음과 같은 방식으로 데이터를 얻을 수 있습니다.
  • GetString(key string) string
  • GetStrings(key string) []string
  • GetInt(key string) (int64, error)
  • GetBool(key string) (bool, error)
  • GetFloat(key string) (float64, error)

  • 예 1:
    func (this *MainController) Post() {
        jsoninfo := this.GetString("jsoninfo")
        if jsoninfo == "" {
            this.Ctx.WriteString("jsoninfo is empty")
            return
        }
    }
    

    만약 당신이 필요로 하는 데이터가 다른 형식일 수도 있습니다. 예를 들어 int64가 아닌 int형식일 수도 있습니다. 그러면 이렇게 처리해야 합니다.
    예 2:
    func (this *MainController) Post() {
        id := this.Input().Get("id")
        intid, err := strconv.Atoi(id)
    }
    

    더 많은 다른request 정보는this를 통해 사용할 수 있습니다.Ctx.정보를 요청하십시오.
    이 대상의 속성과 방법에 대해request 공식 매뉴얼을 참고할 수 있습니다https://gowalker.org/net/http#Request
     
     

    2.struct로 직접 해석


    만약 표의 내용을 하나struct에 값을 부여하려면, 위의 방법으로 하나씩 재값을 얻는 것을 제외하고,
    beego는 또 다른 편리한 방식을 제공했다. 바로struct의 필드 이름이나tag를 통해 폼 필드와 직접적으로struct로 해석하는 것이다.
    예 3:
    struct 정의
    type user struct {
        Id    int         `form:"-"`
        Name  interface{} `form:"username"`
        Age   int         `form:"age"`
        Email string
    }

    양식

    controller에서 해석
    func (this *MainController) Post() {
        u := user{}
        if err := this.ParseForm(&u); err != nil {
            //handle error
        }
    }  

    설명할 사항은 다음과 같습니다.
    (1) structTag form의 정의와renderform 방법은 하나의 라벨을 함께 사용합니다.
    (2)struct를 정의할 때 필드 이름 뒤에form이라는 태그가 있으면form표의name와tag의 이름과 같은 필드를 이 필드에 값을 부여합니다.
    그렇지 않으면form 폼에 필드 이름과 같은 폼 내용을 이 필드에 값을 부여합니다.
    예를 들어 위의 예에서 폼의username과age를 각각user의Name과Age 필드에 값을 부여하고, Email의 내용은 Email 필드에 값을 부여합니다.
    (3) Controller PraseForm을 호출할 때, 전송된 매개 변수는 struct의 지침이어야 합니다. 그렇지 않으면struct에 대한 값이 성공하지 못하고 xxmust be a struct pointer의 오류를 되돌려줍니다.
    (4) 필드를 무시하려면 두 가지 방법이 있습니다. 하나는 필드 이름 소문자로 시작하고, 다른 하나는 form 탭이_로 설정됩니다.
     

    3. Request Body의 내용 가져오기


    API 개발에서 우리는 자주 JSON 또는 XML을 데이터 상호작용의 형식으로 사용하는데, 어떻게 beego에서 Request Body의 JSON 또는 XML의 데이터를 얻을 수 있습니까?
    우선, 프로필에copyrequestbody=true 설정
    다음으로 Controller에서 다음을 수행합니다.
    예 4:
    func (this *ObjectController) Post() {
        var ob models.Object
        var err error
        if err = json.Unmarshal(this.Ctx.Input.RequestBody, &ob); err == nil {
            objectid := models.AddOne(ob)
            this.Data["json"] = "{\"ObjectId\":\"" + objectid + "\"}"
        } else {
            this.Data["json"] = err.Error()
        }
        this.ServeJSON()
    }
    

      

    4. 파일 업로드


    beego에서 파일 업로드를 쉽게 처리할 수 있습니다. form 폼에'enctype='multipart/form-data'를 추가하는 것을 잊지 마십시오. 그렇지 않으면 브라우저에서 업로드 파일을 전송하지 않습니다.
    파일이 업로드된 후에는 일반적으로 시스템의 메모리에 저장됩니다. 만약에 파일의size가 설정된 캐시 크기보다 크면 임시 파일에 저장합니다.
    기본 캐시 메모리는 64M입니다. 이 캐시 메모리의 크기를 다음과 같이 조정할 수 있습니다.
    beego.MaxMemory = 1<<22

    또는 구성 파일에서 다음과 같이 설정합니다.
    maxmemory = 1<<22

    Beego는 파일 업로드를 처리하는 두 가지 편리한 방법을 제공합니다.
    (1)GetFile(key string) (multipart.File, *multipart.FileHeader, error)
    이 방법은 주로 사용자가 폼의 파일 이름을 읽는 데 사용됩니다 the_파일, 그리고 상응하는 정보를 되돌려줍니다. 사용자는 이 변수에 따라 파일 업로드를 처리합니다. 필터링, 파일 저장 등입니다.
    (2)SaveToFile(fromfile, tofile string) error
    이 방법은 GetFile을 바탕으로 신속하게 저장하는 기능을 실현했고fromfile은 제출할 때 html 폼의name입니다.
    예 5
    양식:
    <form enctype="multipart/form-data" method="post">
        <input type="file" name="uploadname" />
        <input type="submit">
    form>

    Controller의 코드:
    func (c *FormController) Post() {
        f, h, err := c.GetFile("uploadname")
        if err != nil {
            log.Fatal("getfile err ", err)
        }
        defer f.Close()
        c.SaveToFile("uploadname", "static/upload/" + h.Filename) //   static/upload,  
        
    }
    

      
     

    5. 데이터 바인딩


    사용자 요청에서 직접 데이터bind에서 지정한 대상까지 지원합니다.
    예 6:
    ?id=123&isok=true&ft=1.2&ol[0]=1&ol[1]=2&ul[]=str&ul[]=array&user.Name=astaxie
    

      
    var id int
    this.Ctx.Input.Bind(&id, "id")  //id ==123
    
    var isok bool
    this.Ctx.Input.Bind(&isok, "isok")  //isok ==true
    
    var ft float64
    this.Ctx.Input.Bind(&ft, "ft")  //ft ==1.2
    
    ol := make([]int, 0, 2)
    this.Ctx.Input.Bind(&ol, "ol")  //ol ==[1 2]
    
    ul := make([]string, 0, 2)
    this.Ctx.Input.Bind(&ul, "ul")  //ul ==[str array]
    
    user struct{Name}
    this.Ctx.Input.Bind(&user, "user")  //user =={Name:"astaxie"}
    

      
     
    다음으로 전송:https://www.cnblogs.com/yangmingxianshen/p/10122027.html

    좋은 웹페이지 즐겨찾기