菜鸟网络工程师的成长笔记——第1天(2016.08.18)
前言
从上个月18号起入职新公司算起,走上网络工程师的行业刚好满一个月。之前在通信公司做嵌入式软件,总感觉有些封闭,有些接触不到世界上最新鲜的东西,于是几乎是降薪,跳槽到一家小网络公司,在我这个年纪来说,其实并不算潇洒,毕竟身边都是比我年轻的人,在互联网行业也都比我能力要强,所以压力还是蛮大的。自己选的路,跪着也要走完,作为一个菜鸟,也只能是慢慢成长。其实感觉这一个月成长也是蛮多的,如果不一一记下来,其实还是有些可惜,从今天起,每天记下当天工作遇到的问题,如果有解决方案,也将其记下来,如果解决不了,也希望网上的大神有看到的,可以指点一二。
1.防止用户重复提交表单
问题分类:后端,HTTP
解决状态:已解决
问题描述
最近在做的网站有一个页面,供用户提交使用的意见和建议,但是调试的时候,发现用户刷新页面,浏览器会提示是否重复提交,然后用户点击是,其实是又一次进行了Post,这是不正确的。如何让用户刷新的时候是进行Get操作呢。
问题解决
一个解决方式是使用Post-Redirct-Get(PRG)模式,就是当收到一个表单后,将用户进行重定向,这样就能防止重复提交表单。
2.mysql表的engine不同造成insert失败
问题分类:数据库,mysql
解决状态:已解决
问题描述
在这个问题上我其实浪费了蛮多时间,我使用Django框架进行web开发,刚开始的时候是使用django自带的makemigration, migrate机制生成和修改数据库。但是老大说这样不易于维护,后面要手写sql来修改,于是我手写sql创建了一个新表,同时有一个外键链接到一个旧表。创建是成功的,但插入数据的时候却会报错。
问题解决
这个问题其实出在mysql的engine上面,这个engine指的是数据库的存储引擎,通常数据库都只提供一种存储引擎,但是mysql却提供了多种存储引擎,用户可以在创建表时进行选择。mysql默认的存储引擎是InnoDB,但我之前使用django的migrate机制创建的表却使用的是MyISAM,这两种engine分别使用都没什么问题(InnoDB其实是MyISAM更高级的版本,支持更高级的操作),但是当两者建立外键关系时,却会出现问题。
目前的解决方法是,为了兼容之前使用django的migrate机制创建的表,新建的表的engine也使用了MyISAM。
3.前端如何实现输入大段文字的文本框
问题分类:前端,HTML
解决状态:已解决
问题描述
这个问题描述起来挺搞笑的,其实还是前端不熟的原因。还是那个提交意见建议的页面,需要一个大的文本框来供用户输入意见与建议,我知道文本框的实现方式是:
<input type="text" name="somename"></input>
大概这样子,然后再通过CSS调节具体样式。但是当我把文本框撑大之后,却发现光标在竖直的维度上总是居中的,而不是我想要的位于左上角,而且各种css方式都不奏效。
问题解决
这个问题微信请教的逗比超,才知道原来我的方向就是错的。大段文字是有专门的HTML标签的:
<textarea name="somename"></textarea>
4.Django提交表单提示CSRF错误
问题分类:后端,Django
解决状态:已解决
问题描述
提交表单时提示CSRF错误,而且后端也的确没有收到表单。
问题解决
CSRF(Cross-site request forgery,跨站请求伪造)。这个攻击其实我还不是太理解,不过大概知道的是Django对此作出了相应的处理,所以正常的表单需要在其template中加入一行。
{% csrf_token %}
Django才能正常接收该表单。
5.如何实现input输入框中默认有文字,点击时消失
问题分类:前端,HTML5
解决状态:已解决
问题描述
这种情形是很常见的,就是输入框开始时会有一个小短语提示要输入什么内容,当用户点击该输入框准备输入时,该短语消失。
问题解决
在HTML5之前,该问题需要用JavaScript来解决。估计是这个问题太过普遍,所以HTML5加入了一个新的属性placeholder来实现这一效果:
<input type="text" name="somename" placeholder="提示文字">