@SovietPower
2022-05-28T00:51:47.000000Z
字数 5053
阅读 1016
学习笔记
作业部落链接:https://www.zybuluo.com/SovietPower/note/1829667
参考:
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/preface.md
https://developer.mozilla.org/zh-CN/docs/Learn
目前:
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/09.5.md
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/09.6.md
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/07.2.md
todo:
live server
以下以go语言作为例子。
.gtpl
文件为结合golang的模板解析语法的html文件。直接用html
做后缀也可以?
具体可见:https://blog.csdn.net/a702365381111/article/details/116199339 或 https://github.com/pywee/gtpl
手机号格式验证
func ck(x string) bool {
res, _ := regexp.MatchString(`^(13[0-9]|14[5-9]|15[0-3,5-9]|16[2,5,6,7]|17[0-8]|18[0-9]|19[0-3,5-9])\d{8}$`, x)
return res
}
移动:134 135 136 137 138 139 147 148 150 151 152 157 158 159 172 178 182 183 184 187 188 195 198
联通:130 131 132 145 146 155 156 166 167 171 175 176 185 186 196
电信:133 149 153 173 174 177 180 181 189 190 191 193 199
虚拟运营商:162 165 167 170 171
广电:190 192 196 197
https://www.cnblogs.com/zengxiangzhan/p/phone.html
130 131 132 133 134 135 136 137 138 139 145 146 147 148 149 150 151 152 153 155 156 157 158 159 162 165 166 167 170 171 172 173 174 175 176 177 178 180 181 182 183 184 185 186 187 188 189 190 191 192 193 195 196 197 198 199
汉字格式验证
https://zhuanlan.zhihu.com/p/33335629
/^[\p{Unified_Ideograph}]+$/u
匹配汉字。/[\u4e00-\u9fa5]/
一般也行。
^[\u0391-\uFFE5A-Za-z]+$
匹配汉字、中文字符、字母。
^[a-zA-Z0-9\u0391-\uFFE5]
匹配汉字、中文字符、数字、字母。
向后端请求
除第一个参数url外:
post
的第二个参数可以是JSON(键值对),用BindJSON获取。
put
同post
。
get
的第二个参数可以用{parmas:{A:a, B:b} }
传入需要的参数,用Bind获取(用form
标签)。
delete
的第二个参数可以用{data:{A:a, B:b}
传入需要的JSON,用Bind获取(用json
标签)。
上面两个的parmas和data,也可直接传入A,B,C
,此时键值相同。也可有的用A
,有的用B:b
,如:
const getOrderByUser = (user_id, limit, offset) =>
axios.get('/api/v2/order', {
params: {
user_id, limit, offset, type: 3,
}
}).then(res => res.data)
注意即使只有一个元素也要加{}
!因为是映射。
后端返回给前端时,如果不绑定json标签,则键名与后端结构体相同;否则与标签一致。
一个URL地址用于描述一个网络上的资源,HTTP中的GET, POST, PUT, DELETE对应着对这个资源的查,增,改,删4个操作。
GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。GET和POST的具体区别:
1. GET请求消息体为空,POST请求带有消息体。
2. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456。POST方法是把提交的数据放在HTTP包的body中。
3. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。
4. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。
工作模式:
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/03.1.md
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/03.3.md
通过路由执行相应handler:
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/03.4.md
表单提交:
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/04.1.md
在表单提交时,客户端会发出一个POST请求(即r.method=="POST"
),r.ParseForm()
解析form后,就可以用r.Form["element_name"]
获取表单值了。
当URL中的query-string
里的某个键,和POST数据里的某个键重复出现时,对应的r.Form["key"]
会返回一个slice,包含这两个或多个值。
如:http://127.0.0.1:9090/login?username=astaxie
,query-string
中包含username
,若POST数据中也包含username
,则r.Form["username"]
为包含两个元素的slice。
request.Form
是一个url.Values
类型,类似哈希表存储了许多键值对,也可以添加键值对。每个键会映射一个slice,即可映射多个值。
通常使用r.Form.Get(key)
获取r.Form
的值,在无该key时会返回nil
。但只返回一个值,而不能返回完整切片。
表单信息验证:
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/04.2.md
session
go实现session基本操作:https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/06.2.md
session安全性:https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/06.4.md
1.在cookie不存在时,设接口获取cookie?
2.使用session := sessions.Default(c)
使用session(而不是初始化一个?)。
session.Save()
可以将session信息存在cookie里。
验证码
mojocn
这个验证码似乎有点简单
官网:https://github.com/mojocn/base64Captcha https://mojotv.cn/go/refactor-base64-captcha
https://www.jianshu.com/p/08319bdd0637?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
dchest
官网:https://github.com/dchest/captcha
https://www.jianshu.com/p/ad3eefba00ca
https://www.topgoer.com/gin%E6%A1%86%E6%9E%B6/%E5%85%B6%E4%BB%96/gin%E9%AA%8C%E8%AF%81%E7%A0%81.html
https://blog.csdn.net/aaaadong/article/details/90645113
注意,这个在提交一次验证码请求后,原验证码就会失效(从数据库中删除),需使用新的验证码。
https://www.runoob.com/w3cnote/restful-architecture.html
简介
https://blog.csdn.net/chenjie9230/article/details/107129286/
promise.then()
的返回值还是该promise?所以可链式调用,将数据依次传递。
then
https://segmentfault.com/a/1190000010420744
Promise中then的参数必须是函数(用于回调,一个或两个),可以有一个参数(resolve的参数或上次then调用回调函数后的返回结果)。如果then的参数不是函数,会忽略该then,往下执行。
async await
https://www.bilibili.com/video/BV1rK4y1J7dm
常见使用场景
高并发下数据缓存。 比如在某个场景下,大量日志同时写入数据库会给服务器带来巨大压力,这时可以先将数据写入redis中,再由redis写入数据库,减轻同时写入压力。
热点信息快速显示。假设现在有一个新闻首页,需要快速显示各栏目前20条热点新闻,如果直接查询数据库,在大量用户同时访问下,会消耗极大数量的数据库请求。这时就可以用redis来优化,在新闻录入的时候将标题、时间和来源写入redis中,客户端访问时,可以从内存中一次性取出当天热单新闻列表,极大地提高请求速度和节约了服务器开销。
保存会话信息。可以将登录后用户信息缓存入redis并同时设置key过期时间,这样后台api过滤请求时,就可以从内存中读取用户信息,而且redis的过期机制,天然支持用户身份有效期校验,用起来十分方便。
统计计数。比如系统中常见一个功能是限制同一用户固定时间段内的登录次数或者所有请求次数,这时就可以以用户id为key,次数值为value,将计数信息缓存起来,并且有INCRBY 命令原生支持。
Redis的应用场景十分广泛,队列、发布订阅、统计分析等等,可以看看其他文章的介绍说明。
go
go-redis:https://github.com/go-redis/redis
redigo:https://github.com/gomodule/redigo
中文文档:https://www.nginx.cn/doc/
简介:https://juejin.cn/post/6844904129987526663