美文网首页程序员软件技巧
【编程】Notebook中使用Flask(续)

【编程】Notebook中使用Flask(续)

作者: zhyuzh3d | 来源:发表于2020-05-18 22:43 被阅读0次

使用Python在Notebook中连接数据库和保存用户名、密码。

安装MongoDB

macOS的安装tgz文件的流程:

  • 解压下载的tgz文件,把里面的bin文件夹内的文件都拷贝到/usr/local/bin
  • 创建数据目录sudo mkdir -p /usr/local/var/mongodb
  • 设置数据目录权限sudo chown my_mongodb_user /usr/local/var/mongodb
  • 创建日志目录sudo mkdir -p /usr/local/var/log/mongodb
  • 设置日志目录权限sudo chown my_mongodb_user /usr/local/var/log/mongodb
  • 启动数据库mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log

windows安装MSI文件流程:

  • 双击安装,选择Complete模式,勾选Install MongoDB as a server(Network server user),建议安装MongoDB Compass。
  • 安装后服务默认会自动启动。

安装Pymongo

直接conda install pymongo安装。

连接数据库

默认MongoDB服务运行在27017端口。

import pymongo
myclient = pymongo.MongoClient('mongodb://localhost:27017/') 
dblist = myclient.list_database_names()
dblist

上面这个代码输出数据库中的全部集合(最初为空)。需要关闭连接的话使用myclient.close()

增删改查

创建数据库和数据集合。

mydb = myclient['mytest']  #创建数据库
mycol = mydb["user"]  #创建集合
mycol.delete_many({})  #清理集合
mydb.list_collection_names()

插入一条数据。

mydict = { "name": "Tom", "height": 167, "age": 18,'sex':1}
dbres = mycol.insert_one(mydict) 
dbres

插入多条数据。

dbres = mycol.insert_many([{
    "name": "Jack",
    "height": 178,
    "age": 17,
    'sex':1
}, {
    "name": "Rose",
    "height": 166,
    "age": 16,
    'sex':0
}])
dbres

查询第一条。

dbres=mycol.find_one()
display(dbres,dbres['age'])

多条查询,注意find括号内是查询条件,即$in表示姓名在列表中的学生。$eq等于,$gt大于,$lt小于,$gte大于等于,$lte小于等于。更多查询方法参考官方文档https://docs.mongodb.com/manual/reference/operator/query-comparison/

dbres=mycol.find({'name':{'$in':['Tom','Rose']}}) #eq,gt,lt,gte,lte,in
for res in dbres:
    display(res)

更新数据,第一个参数是查询对象,第二个是被更新的属性,注意要使用$set才可以。

mycol.update_one({'name': 'Tom'}, {
    '$set': {
        'height': 189
    },
    '$currentDate': {
        'lastModified': True
    }
})

下面的代码用来查看结果。

dbres=mycol.find()
for res in dbres:
    display(res)

创建注册和登录页面

注册页。

%%writefile ./web/reg.html
<!DOCTYPE html>
<form action="/reg">
    <label for="name">name:</label><br>
    <input type="text" id="name" name="name" value="Tom"><br>
    <label for="pw">name:</label><br>
    <input type="text" id="pw" name="pw" value="123456"><br>
    <input type="submit" value="注册">
</form> 

登录页。

%%writefile ./web/login.html
<!DOCTYPE html>
<form action="/login">
    <label for="name">name:</label><br>
    <input type="text" id="name" name="name" value="Tom"><br>
    <label for="pw">name:</label><br>
    <input type="text" id="pw" name="pw" value="123456"><br>
    <input type="submit" value="登录">
</form> 

增加reg和login路由

新增加两个路由函数,用来处理上面两个页面action发来的请求。

%%writefile run.py
from flask import Flask, escape, request, send_from_directory

import pymongo
myclient = pymongo.MongoClient('mongodb://localhost:27017/')
dblist = myclient.list_database_names()
mydb = myclient['mytest']
mycol = mydb["user"]
#mycol.delete_many({}) #清理数据集合

app = Flask(__name__)


@app.route('/hello')
def hello():
    name = request.args.get("name", "World")
    return f'Hello, {escape(name)}!'


@app.route('/reg')
def reg():
    name = request.args.get("name", "World")
    pw = request.args.get("pw", "")
    mydict = {"name": name, "pw": pw}
    dbres = mycol.insert_one(mydict)
    return f'注册成功!'


@app.route('/login')
def login():
    name = request.args.get("name", "World")
    pw = request.args.get("pw", "")
    dbres = mycol.find_one({'name': name})  #eq,gt,lt,gte,lte,in
    if dbres:
        dbpw = dbres['pw']
        if dbpw == pw:
            return f'登陆成功, {escape(name)}!'
        else:
            return f'密码错误, {escape(name)}!'
    else:
        return f'用户不存在, {escape(name)}!'


@app.route('/web/<path:path>')
def send_js(path):
    return send_from_directory('web', path)


if __name__ == "__main__":
    app.run()

然后再次运行服务器:

import subprocess as sp
try:
    server.terminate()
except:
    pass
server = sp.Popen("FLASK_APP=run.py flask run --port=8087", shell=True)
server

最终测试

访问注册页,注册一个名字和密码。


显示注册成功,然后访问登录页,可以用刚才注册的名字和密码登录。

如果输入错误的name会提示用户不存在,如果输入错误的密码会提示密码错误。


欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】


每个人的智能新时代

如果您发现文章错误,请不吝留言指正;
如果您觉得有用,请点喜欢;
如果您觉得很有用,欢迎转载~


END

相关文章

网友评论

    本文标题:【编程】Notebook中使用Flask(续)

    本文链接:https://www.haomeiwen.com/subject/vfxpohtx.html