node.js+express+mySQL+ejs+bootstrop完成网站登录注册

学学Python爬虫肯定比读书Python基础要困难一下,但好在网上的学习资源非凡增进,努力学习必定会有获得的。

index.ejs

<%- include header %>
<div class="jumbotron text-center">
    <% if(locals.islogin){%>

        <h2>用户:<%= test %> </h2>已经登陆

        <% }else{%>

            <h2 class="text-center"><a href="/login">请登录后查看</a></h2>
    <%}%>   
</div>

<%- include footer %>

2:MySQL
是一个采用极其广泛的关系型数据库,它是开源免费的,可以支撑大型数据库,很多中小型集团都是用的MySQL。

主入口app.js

app.js为顺序程序紧要进口,一般紧要用来写大家引入的那么些中间件及各样设置

var express = require('express');
// NodeJS中的Path对象,用于处理目录的对象,提高开发效率
var path = require('path');
// 用来定义网页logo的中间件
var favicon = require('serve-favicon');
// NodeJs中Express框架使用morgan中间件记录日志
// Express中的app.js文件已经默认引入了该中间件var logger = require('morgan');
// 使用app.use(logger('dev'));以将请求信息打印在控制台,便于开发调试,
// 但实际生产环境中,需要将日志记录在log文件里
var logger = require('morgan');
// 存储登录信息中间件
var cookieParser = require('cookie-parser');
// 解析请求体的中间件
var bodyParser = require('body-parser');
// 引入模块的js文件
var routes = require('./routes/index');
// var users = require('./routes/user');
//  引入session中间件
var session=require('express-session');
// 创建项目示例
var app = express();

// 引入我们需要的模板
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// 用摩记录请求
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
// 利用cookieParser中间件存取信息
app.use(cookieParser("Luck"));
// 利用session中间件存取信息
app.use(session({
    secret:'luck',
    resave:false,
    saveUninitialized:true
}));
// 静态化我们的public文件下的文件,使其可以直接引用
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
// app.use('/users', users);

// 捕捉404状态
app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

module.exports = app;

app.listen(3000,'127.0.0.1')

前方说了那么多,都是为着多少解析做准备。数据解析就好比亲手做一顿美食,现在食材有了(通过Python爬虫采集),盛放美食的器皿也有了(数据库)。现在就差开火做饭了,写到那感觉肚子饿了,哎哎,忍住。

login.ejs

<%- include header %>
<div class="container">
    <form class="col-sm-offset-4 col-sm-4 form-horizontal" role="form" method="post">
        <fieldset>
            <% if(locals.islogin) { %>

                    <h3>用户: <%= test %>   已经登陆。<br></h3>
                    <a class="btn" href="/logout"> 退出登录 </a>

                 <% } else{ %>

                        <div class="form-group">
                            <label class="col-sm-3 control-label" for="username">用户名</label>
                            <div class="col-sm-9">
                                <input type="text" class="form-control" id="username" name="username" placeholder="用户名" required>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-3 control-label" for="password">密码</label>
                            <div class="col-sm-9">
                                <input type="password" class="form-control" id="password" name="password" placeholder="密码" required>
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-sm-offset-3 col-sm-9">
                                <button type="submit" class="btn btn-primary">登录</button>
                            </div>
                        </div>
            <% } %>
        </fieldset>
    </form>
</div>
<%- include footer %>

《精晓Scrapy网络爬虫》 那是七月份出的新书,豆瓣上还从未评分。

效果.gif

《Python互联网数据收集》 豆瓣评分:7.7

效果如下

至于Python爬虫的书籍,方今自我还从未较好的书本推荐,如若说实在要推荐的话,我引进三本书:

品类构架

怎么学习使用tableau呢?那里自己推荐三种艺术:

reg.ejs

<%- include header %>
<div class="container">
    <form class=" col-sm-offset-4 col-sm-4 form-horizontal" role="form" method="post">
        <fieldset>

            <div class="form-group">
                <label class="col-sm-3 control-label" for="username">用户名</label>
                <div class="col-sm-9">
                    <input type="text" class="form-control" id="username" name="username" placeholder="用户名" required>
                </div>
            </div>
            <div class="form-group">
                <label class="col-sm-3 control-label" for="password2">密码</label>
                <div class="col-sm-9">
                    <input type="password" class="form-control" id="password2" name="password2" placeholder="密码" required>
                </div>
            </div>
            <div class="form-group">
                <div class="col-sm-offset-3 col-sm-9">
                    <button type="submit" class="btn btn-primary">注册</button>
                </div>
            </div>
        </fieldset>
    </form>
</div>
<%- include footer %>

image

footer.ejs

</article>
</body>
</html>

体系的显要代码都在此,想要读懂的话,臆想要费一段时间的。
率真想学的可以管我要须臾间源码,不过也只可以看,因为自己链接的是当成的数据库。

也可以自动百度,在其官网上利用学生证获取种类码。

老同志们,经过不懈的全力,查了各样文档,终于鼓捣出了一个稍微像样一点的node项目,当然即使直白拿去档次里用,这些demo还太不难,毕竟一个一体化的报到注册还有很多其实的情节,本案例mySQL的用户列表里,为便于精晓,只设置了username
和password七个字段,正常的报到注册,肯定会有越多的字段的。可是对于初学node的人来说,比如作者,依然学习到了成百上千情节,甚至,紧张的自身不知如下下笔,肯定那个是参照了许多网上其余少年博客,未来那么些登录注册demo会依照项目标需求而有所创新,

数据分析师是没错被人为智能取代的新生职业,相比较算法工程师、人工智能工程师而言相比较好入门。学好数据解析,也可为进一步的数据正确、机器学习打下一定的基础。

routes下的index.js文件

index.js那里我用来拍卖页面的路由跳转

var express = require('express');
var router = express.Router();
// 为数据库链接的js文件,可查询数据库中的用户名和密码等信息
var usr=require('netRequest/dbConnect');

// 获取首页登录信息
router.get('/', function(req, res) {
    if(req.cookies.islogin){
        req.session.islogin=req.cookies.islogin;
    }
    if(req.session.islogin){
        res.locals.islogin=req.session.islogin;
    }
  res.render('index', { title: 'HOME',test:res.locals.islogin});
});

// 登录页处理
router.route('/login')
    // get请求渲染页面    
    .get(function(req, res) {
        if(req.session.islogin){
            res.locals.islogin=req.session.islogin;
        }

        if(req.cookies.islogin){
            req.session.islogin=req.cookies.islogin;
        }
        res.render('login', { title: '用户登录' ,test:res.locals.islogin});
    })
    // post请求查询用户信息
    .post(function(req, res) {
        client=usr.connect();
        result=null;
        // 调用数据库方法
        usr.selectFun(client, req.body.username, function (result) {

            if(result[0]===undefined){
                res.send('没有该用户');
            }else{
                if(result[0].password==req.body.password){
                    req.session.islogin=req.body.username;
                    res.locals.islogin=req.session.islogin;
                    res.cookie('islogin',res.locals.islogin,{maxAge:60000});
                    res.redirect('/home');
                }else{
                    res.redirect('/login');
                }
            }
        });
    });
// 退出登录页处理
router.get('/logout', function(req, res) {
    res.clearCookie('islogin');
    req.session.destroy();
    res.redirect('/');
});

// home页处理
router.get('/home', function(req, res) {
    if(req.session.islogin){
        res.locals.islogin=req.session.islogin;
    }
    if(req.cookies.islogin){
        req.session.islogin=req.cookies.islogin;
    }
    res.render('home', { title: 'Home', user: res.locals.islogin });
});

// 注册页处理
router.route('/reg')
    // get请求渲染页面
    .get(function(req,res){
        res.render('reg',{title:'注册'});
    })
    // post请求注册用户
    .post(function(req,res) {
        client = usr.connect();
        // 调用数据库方法
        usr.insertFun(client,req.body.username ,req.body.password2, function (err) {
              if(err) throw err;
              res.send('注册成功');
        });
    });

module.exports = router;

GitHub的上学可以看廖雪峰先生的GitHub教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

header.ejs

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"/>
    <title>Test</title>
    <link rel="stylesheet" href="/bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    <script type="text/javascript" src="/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
</head>
<body>
<!--    <header>
        <h1><%= title %></h1>
    </header> -->
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                    Toggle navigation



                </button>
                <a class="navbar-brand" href="#">Project name</a>
            </div>
            <div id="navbar" class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li class="active"><a href="#">待定</a></li>
                    <li><a href="#">待定</a></li>
                    <li><a href="#">待定</a></li>
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">待定</a>
                        <ul class="dropdown-menu">
                            <li><a href="#">Action</a></li>
                            <li><a href="#">Another action</a></li>
                            <li><a href="#">Something else here</a></li>
                            <li role="separator" class="divider"></li>
                            <li class="dropdown-header">Nav header</li>
                            <li><a href="#">Separated link</a></li>
                            <li><a href="#">One more separated link</a></li>
                        </ul>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li class="active"><a title="主页" href="/">首页(current)</a></li>
                    <li><a title="登陆" href="/login">登录</a></li>
                    <li><a title="注册" href="/reg">注册</a></li>
                </ul>
            </div>
        </nav>

        <article>

对于编程方面的书籍,我指出购买图灵丛书体系的,质量很高。对于各大出版社,个人认为:人民邮电出版社>南开高校出版社>机械工业出版社。买得一本好书,会让投机的学习更是百发百中,所以要细心鉴别。

node_modules中netRequest/dbConnect.js

dbConnect.js

var mysql=require('mysql');

// 现在只是练习可以直接为数据库创建链接,
// 用户多时需要创建连接池
function connectServer(){
    var client=mysql.createConnection({
        host:'172.16.20.103',
        port:3308,
        database:'test',
        user:'JRJ_Win',
        password:'FT%^$fjYR56'
    })
    return client;
}

function  selectFun(client,username,callback){
    client.query('select password from win.luck_user where username="'+username+'"',function(err,results,fields){
        if(err) throw err;
        callback(results);
    });
}

function insertFun(client , username , password,callback){
    client.query('insert into win.luck_user value(?,?)', [username, password], function(err,result){
        if( err ){
            console.log( "error:" + err.message);
            return err;
        }
          callback(err);
    });
}

exports.connect = connectServer;
exports.selectFun  = selectFun;
exports.insertFun = insertFun;

剩余即为页面模板

当前紧要有种种数据库:

讲的专门不难。易于上手。

此处自己推荐几本书(都是放在自身购物车里还从未买的书)

三:数据解析能力

2 购买书籍来学学:

《Python爬虫开发与品类实战》 豆瓣评分:8.1

自然,唯有Python基础肯定是不够的,既然是上学数据解析,肯定就要有数量才行,数据从何地来,肯定是从网络上来。互连网上的音讯何其之多,必须求对其再说过滤处理,提取大家想要的新闻。那即将动用Python爬虫,那也是学Python一个很重大的目标和效劳。

二:SQL

《用多少讲故事》 豆瓣评分:8.7

或者W3Cschool上的Python教程:https://www.w3cschool.cn/python/

怎么着?你未曾耳闻过tableau?现在听我说了也不迟,哈哈。

数量可视化需求看重工具,什么工具呢?那就是响当当的tableau!

至于编程能力,是一个很深的定义,要求靠多量的撸代码积累经验。先暂且说到那些。

学学数据解析必须要看的书单:

四:数据可视化

即使如此自己还没来得及看这几本书,可是本人想认真看领会后,对于数据解析的精通肯定会愈加深切的。

共勉!

一:编程能力

它们各有助益,能够灵活使用,如果说非要选一个的话,我提议使用MySQL,因为它利用最广大。学习最主流的技巧,可以在肯定程度上发挥更大的效应。

至于SQL的读书资源:

说了那样多,大家如故好好聊聊怎么学习tableau吧。tableau是一款收费软件,先看一下它的标价吧:

豆子评分:9.0,好像那本书出了第二版了,指出购买新式版的。

3:MongoDB 是一个面向文档的非关系型数据库,它效能强大、灵活、易于拓展。

搜狐里面有诸多爬虫大神,没事多逛逛新浪总会有收获的。

廖雪峰先生的Python(进阶)教程:http://www.imooc.com/learn/317

1 观察其官网上的入门教学摄像

而是,tableau的人心之处在于:学生和导师可防止费使用tableau,只必要用大家的学童证音讯去免费报名一个体系码,然后就足以下载激活该软件,有效期为1年,倘使一年后或者学生的话,还足以用学生证再去申请一个队列号,然后再免开销一年。

购置图书推荐《SQL基础教程》小编:MICK

当然,如果得以的话,再精通一下R语言是极其然则的,学习嘛,永无止尽。

《利用Python举行数量解析》二〇一三年的老书,豆瓣评分:8.5

对此数据解析,我还没有过多的加入,不言而喻,多看书,多做项目。

学学之路漫漫,切记不可懈怠!

鼎力通过上述学习,成为一名良好的数据分析师就指日可待了。上边谈到的四点倾向于商业数据解析,对于数据挖掘方向,必要控制越多的数学和统计知识。

采购书籍的话,推荐《Python编程:从入门到执行》 豆瓣评分:9.0

W3Cschool的MySQL教程:https://www.w3cschool.cn/mysql/

tableau是一款超级的商业智能工具软件,tableau可以匡助大家很快的分析、可视化并享受音信。在福布斯二零一七年公布的《10大须要增强最快的职场技能》报告中,tableau高居第三,成为多少解析和可视化的职场必杀技。

推荐W3Cschool的SQL教程:https://www.w3cschool.cn/sql/

说了那般多,若是对您有好几的震撼或者启发,那自己写的那一个就是很有含义了。

共计80个上学摄像。

五:GitHub技能

读书数据解析,最难最要害的就是编程能力,熬过去了,前面的就不怎么简单一些了。

tableau的下载地址:https://www.tableau.com/zh-cn/products/desktop/download

日前本人博客园了种种怎样学习数据解析之类的话题,get到了许多开辟数据解析的正确性姿势,现在就可以归咎总括一哈。

1:SQLite
是一个文件型轻量级数据库,它的处理速度很快,在数据量不是很大的情事下,可以使用SQLite。

廖雪峰先生的Python(入门)教程:http://www.imooc.com/learn/177

4:Redis 是一个利用ANSI C
编写的高品质key-value数据库,使用内存作为主存储器。

至于Python爬虫的学习资源网上有无数,那里我引进:

《Python数据解析基础》5月份的新书,豆瓣上还尚未评分。

有关数据解析的编程语言有Python和R语言。R语言倾向于总结分析、绘图等。统计学家或者学统计学的喜好用R语言,而自我引进学习Python,因为Python是面向将来的语言,无论从流行度、可用性仍旧上学难度来讲,Python都是最好的入门语言。

零基础学习Python可以看看:

腾讯网大V:路人甲
,他的特辑《学习编程》,关怀人数达114k,里面有不少读书Python的资源和小结,非凡的给力。

GitHub可以说是各种程序员必须驾驭的技艺,在面试找工作的时候,有GitHub项目,或者为某GitHub开源项目贡献过源码都是面试的加分项。之所以把GitHub放在最后讲,是因为那不关乎数据解析的根基学习,而是每个从事IT行业的程序员的必备技能。

既是是跟数据打交道,就免不了要拔取数据库。

抑或菜鸟教程上的Python教程:http://www.runoob.com/python/python-tutorial.html

是不是会编程是分别初级数据分析师和高档数据分析师的冰峰。在此间,我定位的是高等数据分析师,所以编程能力尤为关键,我把它身处了第三位。

image

天天上学一点点,每一天提高一点点。

本来:纸上得来终觉浅,绝知此事要躬行。一定要多练,多撸代码,不懂就看文档,问度娘。

果不其然美妙的软件都是收费的,而且还贵的要死。

爬虫大神崔庆才的私家博客:http://cuiqingcai.com/,博客里面满满的Python爬虫教程,卓越的决定。

《Python数据处理》一月份的新书,豆瓣上尚无评分。

推荐书籍《人人都是数量分析师:tableau应用实战》 豆瓣评分:7.3

方今美食做好了,但不可能一股脑的装在碗里呢,美食讲究色香味俱全。所以要给它作一个可观的模样,显示在别人面前。那就是数额可视化。

学习.png