记录moobox的点滴(技术篇)
在moobox工作了两个月,用这篇日志记录这段日子的技术点滴。
ps.虽然一直有这个计划,平时也会作笔记,但是到头来还是记得不太全,
就粗略的写一下好了。
Mysql
公司用的数据库是mysql,可惜自己对数据库的知识忘得差不多了,下面记录一些后来回忆起的sql用法。
有个软件叫做 MySQL Workbanch,还是挺方便的。
1.增删改查就不说了,还是要熟练,总不能写一次去看一下语法吧。
2.desc也是必备,以前上学的时候老是记不清,但工作中还是desc用的比较多,asc是默认的升序。
3.left和inner join,关联多表的时候的必备,还是要保持清醒。
4.group by后边可以加限制条件,叫做group by having (…), 学数据库的时候学过,小小鸟提起的时候才如梦初醒
group by的时候可以根据两个条件进行group by, 例如:
//获取每个地推人员的每天数据
//计算录入
select date(from_unixtime(b.CreatedDate+60*60*8)), count(distinct a.UID),b.CreatedBy from ParkingRawData a
inner join Customer b on a.UID = b.ParkingUID where Source = 'tuhu' and b.CreatedBy != ''
group by date(from_unixtime(b.CreatedDate+60*60*8)), b.CreatedBy
4.insert的妙用:
INSERT INTO ParkingRawDataHistory(RawID,UID,Name)
select ID,UID,Name from ParkingRawData
where UID = 'e4d1701c-4185-11e5-af26-3c15c2bca022';
5.sql 时间戳
SELECT FROM_UNIXTIME( 1440015345, '%Y年%m月%d日' )
SELECT UNIX_TIMESTAMP()
SELECT UNIX_TIMESTAMP(Current_TimeStamp)
6.模糊查找
SELECT * FROM ParkingRawData where name like "%虹景公寓酒店%"
总结:学好sql语句也是很重要的,一句好的sql语句能很好的简化代码的复杂度,
并且提高接口的效率,只恨自己数据库忘得太快。
Python
1.每次在django中添加接口,我都要检查的问题:
- -数据库中api和page的权限。
- setting中数据库变量的配置 和 接口url的配置是否正确。
- WebInterfaceBase修改跨越问题(后台和前端没有放在一个项目里)。
- 测试接口时json格式是否正确(可以去网上好多在线检测的网站)。
2.python list去除重复元素
list(set(all_workers))
{}.fromkeys(workers).keys()
3.django端口占用的问题
查看端口占用
I:\Users\Daya>netstat -aon|findstr "8000"
TCP 0.0.0.0:8000 0.0.0.0:0 LISTENING 5664
TCP 127.0.0.1:8000 127.0.0.1:49640 ESTABLISHED 5664
TCP 127.0.0.1:8000 127.0.0.1:49851 ESTABLISHED 5664
TCP 127.0.0.1:8000 127.0.0.1:49852 ESTABLISHED 5664
TCP 127.0.0.1:49640 127.0.0.1:8000 ESTABLISHED 3716
TCP 127.0.0.1:49851 127.0.0.1:8000 ESTABLISHED 3716
TCP 127.0.0.1:49852 127.0.0.1:8000 ESTABLISHED 3716
I:\Users\Daya>tasklist|findstr "5664"
pycharm.exe 5664 Console 1 372,204 K
I:\Users\Daya>tasklist|findstr "3716"
chrome.exe 3716 Console 1 196,444 K
4.遇到过一个问题就是django的问题就是明明有这个文件夹,却报错说找不到。
因为这个文件夹里没有init的空文件,django是通过URL和这个标示来找的。
5.时间戳的一些操作
# 时间的转换,python的包都很完善了。
print int(time.mktime(time.strptime("20140903131540", '%Y%m%d%H%M%S')))
# 时间戳,统一0时区的时间戳。
vtimestamp = str(time.mktime(datetime.datetime.utcnow().timetuple()))
6.后来加的分页操作,注意limit后边两个参数的意义。
cursor.execute(sql_count)
data = cursor.fetchall()
if len(data) > 0:
pagecount = data[0][0]/pagesize + 1
self.pagecount = pagecount
start = (pagenumber-1) * pagesize
sql += " limit %s, %s " % (start, pagesize)
先说这这些吧,其实还有好多,不细说了。
说一点感悟吧,写代码就是生活中做事一样,一个好的计划是最重要的, 每一步做什么理清楚后,
写起代码来就事半功倍了,所以不要埋头苦写,做点草稿,有好的规划才行。
JS+HTML5
做后台的话,有时候写完接口,还要迫不得已要把前台的东西都包了、
但说实话,之前对js真的是完全没有实战过,所以写起来还是很吃力。
有力发不出的感觉,总是被一些小错误困扰很久,把一些简单的问题搞复杂。
记录一些前端方面的新知识吧。
1.自适应布局:http://nec.netease.com/library/101023
之前大一学过css布局,但现在都是html5了还要手机适配,原来的样式已经用不了了。
上面这个网址还不错,有一些自适应的例子,但感觉还是好复杂,应该有更简单的解决方法吧。
2.jquery的show()和hide()其实就是改变dispay:none
3.设置a标签的超链接
//以前的超链接
<a href="#"></a>
//现在的写法,防止出错。
<a href="javascript:;"></a>
4.确认按钮 弹出是否提交?
if (confirm("确认信息无误?")) {}
5.动画 旋转
transform:rotate(90deg)
transform:rotate(0deg);
transition: transform 0.3s;
6.滚动条的自动定位
$('.div-fixed-height').animate({scrollTop: $('#reportdetail').height()}, 300);
7.遍历所有td
$("#nearparkingscontent").find(":checkbox:checked").each(function(){
var val = $(this).closest('tr').find('td').eq(7).text();
parking_uids += val + " ";
});
8.js str去除最后一位
type.parkingtype = parkingtypestr.substring(0, parkingtypestr.length-1);
9.checkbox 的onchange事件
function alertMerge(check1){
if(check1.checked==true)
if (confirm("确认合并此停车场?")) {
//
}else{
check1.checked=false;
//check1.attr("checked", "checked");
}
}
10.jquery 移除样式。
$(".syzx > span:first").removeAttr("style");
总结:js不会的多,记的笔记也多点,但总的来说,个人觉得js是一个很灵活的语言,
有时间还是要多掌握一些基础的特性,才能写出一些精炼高效的代码。