{"id":26237546,"url":"https://github.com/yang-f/beauty","last_synced_at":"2025-04-22T21:48:05.019Z","repository":{"id":57488680,"uuid":"84645215","full_name":"yang-f/beauty","owner":"yang-f","description":"A microframework  based on mymysql,net/http,jwt-go and mux.","archived":false,"fork":false,"pushed_at":"2019-09-25T04:17:12.000Z","size":127,"stargazers_count":62,"open_issues_count":0,"forks_count":13,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-29T19:11:24.553Z","etag":null,"topics":["cors-request","error-handler","framwork","golang","logging","rest-api","restful-api","session","simple"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yang-f.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-03-11T11:29:17.000Z","updated_at":"2025-01-03T21:45:58.000Z","dependencies_parsed_at":"2022-08-29T13:31:57.590Z","dependency_job_id":null,"html_url":"https://github.com/yang-f/beauty","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yang-f%2Fbeauty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yang-f%2Fbeauty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yang-f%2Fbeauty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yang-f%2Fbeauty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yang-f","download_url":"https://codeload.github.com/yang-f/beauty/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250331104,"owners_count":21413094,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cors-request","error-handler","framwork","golang","logging","rest-api","restful-api","session","simple"],"created_at":"2025-03-13T05:28:38.865Z","updated_at":"2025-04-22T21:48:04.994Z","avatar_url":"https://github.com/yang-f.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"- [English](README.md)\n- [中文](README_ZH.md)\n\n[![GoDoc](https://godoc.org/github.com/yang-f/beauty?status.svg)](https://godoc.org/github.com/yang-f/beauty)\n\n# A simple framwork written in golang.\n\nYou can build a simple restful project or a web application with it.\nIf you dosen't want to use mysql db, you can implement your own Auth decorates and session.You can use your own DAO or whatever you like.\n\n## quick start:\n\n- run cmd\n  ```\n  mkdir demo \u0026\u0026 cd demo\n  go get gopkg.in/alecthomas/kingpin.v2\n  go get github.com/yang-f/beauty\n  ```\n- add $GOPATH/bin to your $PATH\n\n- run cmd beauty\n\n  ```\n  usage: beauty [\u003cflags\u003e] \u003ccommand\u003e [\u003cargs\u003e ...]\n\n  A command-line tools of beauty.\n\n  Flags:\n    --help  Show context-sensitive help (also try --help-long and --help-man).\n\n  Commands:\n    help [\u003ccommand\u003e...]\n      Show help.\n\n    demo\n      Demo of web server.\n\n    generate \u003cname\u003e\n      Generate a new app.\n  ```\n\n- test beauty\n  ```\n  beauty demo\n  ```\n- then\n  ```golang\n  2017/05/04 16:21:05 start server on port :8080\n  ```\n- visit 127.0.0.1:8080\n\n  ```golang\n  {\"description\":\"this is json\"}\n  ```\n\n- visit 127.0.0.1:8080/demo1\n\n  ```golang\n  {\"description\":\"this is json\"}\n  ```\n\n## How to use:\n\n- Generate new app\n  ```\n  beauty generate yourAppName\n  ```\n- dir list\n\n  ```\n  GOPATH/src/yourAppName\n  ├── controllers\n  │   ├── adminController.go\n  │   └── controller_test.go\n  ├── decorates\n  |   └── http.go\n  ├── main.go\n  ├── models\n  ├── tpl\n  └── utils\n  ```\n\n- about Route\n\n  - demo\n\n  ```golang\n      r := router.New()\n\n      r.GET(\"/\", controllers.Config().ContentJSON())\n\n      r.GET(\"/demo1\", controllers.Config().ContentJSON().Verify())\n\n  ```\n\n- token generate\n\n  ```golang\n  tokenString, err := token.Generate(fmt.Sprintf(\"%v|%v\", user_id, user_pass))\n\n  ```\n\n- demo\n\n  ```golang\n  package main\n\n  import (\n      \"net/http\"\n      \"log\"\n      \"github.com/yang-f/beauty/consts/contenttype\"\n      \"github.com/yang-f/beauty/router\"\n      \"github.com/yang-f/beauty/settings\"\n      \"github.com/yang-f/beauty/controllers\"\n      \"github.com/yang-f/beauty/decorates\"\n\n  )\n\n  func main() {\n\n      log.Printf(\"start server on port %s\", settings.Listen)\n\n      settings.Listen = \":8080\"\n\n      settings.Domain = \"yourdomain.com\"\n\n      settings.DefaultOrigin = \"http://defaultorigin.com\"\n\n      settings.HmacSampleSecret = \"whatever\"\n\n      r := router.New()\n\n      r.GET(\"/\", controllers.Config().ContentJSON())\n\n      r.GET(\"/demo1\", controllers.Config().ContentJSON().Verify())\n\n      log.Fatal(http.ListenAndServe(settings.Listen, r))\n  }\n  ```\n\n## Support:\n\n- token\n\n```golang\nsettings.HmacSampleSecret = \"whatever\"\n\ntoken, err := token.Generate(origin)\n\norigin, err := token.Valid(token)\n```\n\n- cors\n\n  - static file server\n\n  ```golang\n  router.PathPrefix(\"/static/\").Handler(http.StripPrefix(\"/static/\", decorates.CorsHeader2(http.FileServer(http.Dir(\"/your/static/path\")))))\n  ```\n\n  - api etc:\n    - default is cors\n\n- error handler\n\n  ```golang\n  func XxxxController() decorates.Handler{\n      return func (w http.ResponseWriter, r *http.Request) *models.APPError {\n          xxx,err := someOperation()\n          if err != nil{\n              return \u0026models.APPError {err, Message, Code, Status}\n          }\n          ...\n          return nil\n      }\n  }\n  ```\n\n- utils\n\n  - Response\n  - Rand\n  - MD5\n  - Post\n\n- test\n  - go test -v -bench=\".\\*\"\n  - go test -v -short \\$(go list ./... | grep -v /vendor/)\n  - ...\n\n## Contributing:\n\n1. Fork it!\n2. Create your feature branch: `git checkout -b my-new-feature`\n3. Commit your changes: `git commit -m 'Add some feature'`\n4. Push to the branch: `git push origin my-new-feature`\n5. Submit a pull request :D\n\n## TODO:\n\n- [x] Cmd tools\n- [ ] Improve document\n- [ ] Role review\n- [ ] Error handler\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyang-f%2Fbeauty","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyang-f%2Fbeauty","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyang-f%2Fbeauty/lists"}