上药三品,神与气精

曾因酒醉鞭名马 生怕情多累美人


  • 首页

  • 关于

  • 分类

  • 标签

  • 归档

  • 搜索

2019-go-01

发表于 2019-02-13 | 分类于 golang | 阅读次数:
字数统计: 711 | 阅读时长 ≈ 3

beego orm

已支持数据库驱动:

  • MySQL:github.com/go-sql-driver/mysql
  • PostgreSQL:github.com/lib/pq

导入驱动

import (
    _ "github.com/go-sql-driver/mysql"
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// models/User.go

type Users struct {
Id int
Name string
Pwd string
Age int
Sex string
}

/*
//我们也可以使用Tag对属性进行详细的设置
type Users struct {
Id int `pk:"auto;column(id)"` //设置主键自增长 列名设为id
Name string `orm:"size(15);column(name)"` //设置varchar长度为15 列名为name
Pwd string `orm:"size(15);column(pwd)"`
Age int `orm:"column(age)"`
Sex string `orm:"size(15);column(sex)"`
}
*/


//初始化
func init() {
//注册数据驱动
// orm.RegisterDriver("mysql", orm.DR_MySQL)
// mysql / sqlite3 / postgres 这三种是默认已经注册过的,所以可以无需设置
//注册数据库 ORM 必须注册一个别名为 default 的数据库,作为默认使用
orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/HelloBeego")
//注册模型
orm.RegisterModel(new(Users))
//自动创建表 参数二为是否开启创建表 参数三是否更新表
orm.RunSyncdb("default", true, true)
}
1
2
3
4
5
6
7
orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8", maxIdle, maxConn)

// 参数1 数据库的别名,用来在 ORM 中切换数据库使用
// 参数2 数据库驱
// 参数3 对应的连接字符串
// 参数4(可选) 设置最大空闲连接
// 参数5(可选) 设置最大数据库连接 (go >= 1.2)

模型设置详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
忽略字段
设置 - 即可忽略 struct 中的字段
AnyField string `orm:"-"`

auto
当 Field 类型为 int, int32, int64, uint, uint32, uint64 时,可以设置字段为自增健
当模型定义里没有主键时,符合上述类型且名称为 Id 的 Field 将被视为自增健。

pk
设置为主键,适用于自定义其他类型为主键

null
数据库表默认为 NOT NULL,设置 null 代表 ALLOW NULL
Name string `orm:"null"

index
为单个字段增加索引

unique
为单个字段增加 unique 键
Name string `orm:"unique"`

column
为字段设置 db 字段的名称
Name string `orm:"column(user_name)"`

size
string 类型字段默认为 varchar(255)
设置 size 以后,db type 将使用 varchar(size)
Title string `orm:"size(60)"`


digits / decimals
设置 float32, float64 类型的浮点精度
Money float64 `orm:"digits(12);decimals(4)"`
总长度 12 小数点后 4 位 eg: 99999999.9999

auto_now / auto_now_add
Created time.Time `orm:"auto_now_add;type(datetime)"`
Updated time.Time `orm:"auto_now;type(datetime)"`
auto_now 每次 model 保存时都会对时间自动更新
auto_now_add 第一次保存时才设置时间
对于批量的 update 此设置是不生效的
type
设置为 date 时,time.Time 字段的对应 db 类型使用 date


Created time.Time `orm:"auto_now_add;type(date)"`
设置为 datetime 时,time.Time 字段的对应 db 类型使用 datetime
Created time.Time `orm:"auto_now_add;type(datetime)"`

default
为字段设置默认值,类型必须符合(目前仅用于级联删除时的默认值)
Status int `orm:"default(1)"`

2019-go-00

发表于 2019-02-13 | 分类于 golang | 阅读次数:
字数统计: 626 | 阅读时长 ≈ 2

session & cookie

1.Http是无状态的协议,服务器不能记录浏览器的访问状态,也就是服务器不能区分两次请求是否是来自同一个客户端。

2.Cookie实际上是服务器保存在浏览器上的一段信息,浏览器有了Cookie之后,每次向服务器发送请求都会带着该信息进行访问,服务器在收到请求之后,就可以通过该信息进行处理。

3.Cookie由服务器创建,并发给浏览器,最终由浏览器保存。

Cookie的用途

  • 电商网站的购物车
  • 保持用户登陆状态

使用beego.Router()注册路由

beego.Router("/cookie",&controllers.CookieController{})

控制器


package controllers

import "github.com/astaxie/beego"

type CookieController struct {
    beego.Controller
}

func (this *CookieController)Get()  {
    if this.Ctx.GetCookie("user") ==""{  
        this.Ctx.SetCookie("user","admin")
        this.Ctx.WriteString("Cookie设置成功")
    }else{
        user:= this.Ctx.GetCookie("user")
        this.Ctx.WriteString("user="+user)
    }
}

我们先通过this.Ctx.GetCookie(“key”)判断浏览器是否有Cookie ,如果没有就使用this.Ctx.SetCookie(“key”,”value”)设置,如果有就获取并输出。

注意Cookie的键和值不能为中文

this.Ctx.SetCookie("user","admin",10)

SetCookie的第三个参数是时间,单位是秒 ,如果不设置时间,Cookie只在本次会话有效,默认存活时间为3600秒

this.Ctx.SetCookie("user","admin","100","/cookie")

Session的使用

Beego默认关闭Session,如果想要使用Session,需要在配置文件或程序中设置,分别为

beego.BConfig.WebConfig.Session.SessionOn = true和sessionon=true

设置Session

this.SetSession(“usesrname”, “admin”)

删除Session

This.GetSession(“username”),如果没有获取到session,会返回nil,和cookie不一样,getCookie返回空字符串。

Session是一段保存在服务器上的一段信息,当客户端第一次访问服务器时创建。同时也创建一个名为beegosessionID,值为创建Session的id的Cookie
这个beegosessionID对应服务器中的一个Session对象,通过它就可以获取到保存用户信息的Session

通过this.DelSession(“password”)和this.DestroySession()均可以删除Session,其区别在于DelSession删除指定的Session, DestroySession删除所有session。

可以通过beego.BConfig.WebConfig.Session.SessionName = “admin”和sessionname设置Cookie名称,如果在配置文件和主函数都设置了,主函数优先,因为beego先加载配置文件后执行主函数,所以主函数中设置的内容回对配置文件中设置的内容进行覆盖。

one-line-python

发表于 2019-02-11 | 阅读次数:
字数统计: 411 | 阅读时长 ≈ 2

一行python代码能够做什么

1
python -c "import this"
1
2
3
4

python -m SimpleHTTPServer 8080 # python2

python3 -m http.server 8080 # python3
1
for x in range(1, 101): print("fizz"[x % 3 * 4:]+"buzz"[x % 5 * 4:] or x)
1
print('\n'.join([''.join([('Love'[(x-y) % len('Love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0else' ') forx in range(-30, 30)]) fory in range(30, -30, -1)]))
1
print('\n'.join([''.join(['*'if abs((lambda a: lambda z, c, n: a(a, z, c, n))(lambda s, z, c, n: z if n == 0 else s(s, z*z+c, c, n-1))(0, 0.02*x+0.05j*y, 40)) < 2 else ' ' for x in range(-80, 20)]) for y in range(-20, 20)]))
1
print('\n'.join([' '.join(['%s*%s=%-2s' % (y, x, x*y) fory in range(1, x+1)]) forx in range(1, 10)]))
1
2
3
print(' '.join([str(item) for item in filter(lambda x: not [x % i for i in range(2, x) if x % i == 0], range(2, 101))]))

print(' '.join([str(item) for item in filter(lambda x: all(map(lambda p: x % p != 0, range(2, x))), range(2, 101))]))
1
print([x[0] for x in [(a[i][0], a.append([a[i][1], a[i][0]+a[i][1]])) for a in ([[1, 1]], ) for i in range(30)]])
1
qsort = lambda arr: len(arr) > 1and qsort(list(filter(lambda x: x <= arr[0], arr[1:]))) + arr[0:1] + qsort(list(filter(lambda x: x > arr[0], arr[1:]))) or arr
1
[__import__('sys').stdout.write('\n'.join('.' * i + 'Q' + '.' * (8-i-1) for i in vec) + "\n========\n") for vec in __import__('itertools').permutations(range(8)) if 8 == len(set(vec[i]+i for i in range(8))) == len(set(vec[i]-i for i in range(8)))]
1
flatten = lambda x: [y for l in x for y in flatten(l)] if isinstance(x, list) else [x]
1
array = lambda x: [x[i:i+3] for i in range(0, len(x), 3)]
1
print(sum(map(int, str(2**1000))))

how-to-be-a-daniu

发表于 2019-02-11 | 阅读次数:
字数统计: 54 | 阅读时长 ≈ 1

误区

  • 拜大牛为师
  • 业务代码一样很牛逼?
  • 上班太忙没时间学习

正确做法

  • do more

—> 熟悉更多业务

—> 熟悉端到端

—> 自学

  • do better
  • do exercise
  • learning
  • trying
  • teaching

前端总规划总结

发表于 2019-02-10 | 阅读次数:
字数统计: 0 | 阅读时长 ≈ 1
1…495051…109
John Cheung

John Cheung

improve your python skills

543 日志
33 分类
45 标签
RSS
GitHub Email
© 2020 John Cheung
本站访客数:
|
主题 — NexT.Pisces v5.1.4
博客全站共226.3k字