验证器

对客户端提交过来的数据进行合法性验证, 是验证器要做的.
TypePress 确定完数据表结构后要写的一个 Go 代码就是验证器相关.
通常客户端提交的数据是字符串形式.
通常这些数据是和数据库表字段一一对应的.
验证的途径, 常见的有这两种.

tag

事实上我们总是用OOP的方法把数据表 struct 化.
TypePress 也这么做了 meta.

  1. type Users struct {
  2. User_id uint64 //自增唯一id
  3. User_login string //md5 登录名
  4. User_pass string //md5 密码
  5. User_nicename string //显示名称
  6. User_date time.Time //注册时间
  7. User_status uint32 //用户状态
  8. Site string //博客子域名
  9. }

Users对应的就是数据表users. tag 的方式这样做.

  1. type Users struct {
  2. // 省略其他字段
  3. User_nicename string `valid:"MinSize:5,MaxSize:50"`
  4. }

当然要让这个生效需要其他的代码配合.

函数

函数的方法比较暴力, 就是定义一堆的验证函数等待你去调用.

  1. // UTF-8编码的字符串,只能通过遍历计算长度.
  2. func MinSize(s string, l int) bool {
  3. l--
  4. for i, _ := range s {
  5. if i == l {
  6. return true
  7. }
  8. }
  9. return false
  10. }
  11. // 调用
  12. if !MinSize("要验证的User_nicename", 5) {
  13. //验证失败的处理
  14. return
  15. }

TypePress 正是采用这种暴力 函数验证 的方式, 并且你会看到更暴力生硬的代码. 那些代码肯定不是我一行行敲出来的, 编辑器的使用技巧而已. 写这些代码用不了几分钟.
TypePress 把验证器和数据表 struct 定义放到一起, 目录命名 meta.
你会看到所有的验证函数都有 Is 前缀, 加个统一的前缀, 只是为了在编辑器里面自动完成方便.