Flask-PyMongo 架起来 Flask 和 PyMongo 之间的桥梁,因此你能够使用 Flask 正常的机制去配置和连接 MongoDB。
根据官方的示例,并做一些简单的修改实现增、删除、改查的操作。
系统:Windows10
Python版本:python-3.5.2
Pycharm:4.0.7
特别说明:因为之前使用的flask是1.0以下的版本,所以使用Flask-PyMongo插件的方式跟现在新版本1.0以上的Flask就有所区别了。
如果遇到以下情况不能实现示例,请修改一下配置即可。
C:\Python35\python.exe C:/Users/Administrator/PycharmProjects/blog/blog.py
Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/blog/blog.py", line 12, in <module>
mongo = PyMongo(app)
File "C:\Python35\lib\site-packages\flask_pymongo\__init__.py", line 116, in __init__
self.init_app(app, uri, *args, **kwargs)
File "C:\Python35\lib\site-packages\flask_pymongo\__init__.py", line 146, in init_app
"You must specify a URI or set the MONGO_URI Flask config variable",
ValueError: You must specify a URI or set the MONGO_URI Flask config variable
解决方法,就是要加入一个参数MONGO_URI 可以加到config.py 中,也可以在主程序中加入。
详情可看官方文档:
以下示例操作时使用的Flask版本为0.8的。
通过Pycharm创建一个FLask项目,因为我这里是加入了本地的git仓库,所以颜色有点变化。
index.html文件没有做任何的修改,因为这里还没有添加其它的CSS,JS暂时只做一个返回数据用。
config.py 配置文件,这里仅记录一些数据库配置。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017/9/21 08:19
# @Author : Swper
# @Site : http://www.58jb.com/
# @File : config.py
# @Software: PyCharm
#MONGODB CONFIG
class MongoDB():
MONGO_HOST = "127.0.0.1"
MONGO_PORT = 27017
MONGO_DBNAME = "blog"
主程序:blog.py
from flask import Flask,render_template
from flask_pymongo import PyMongo
from config import MongoDB
app = Flask(__name__)
#实例化数据库配置,可以直接一行解决
mongo = PyMongo(app)
#也可以两行来实例化配置,这里会把所有以MONGO开头的配置加入。
# app.config.from_object(MongoDB)
# mongo.init_app(app,config_prefix="MONGO%")
@app.route('/')
def index():
# 测试数据库是否连接成功,如果成功就会返回Pymongo一个游标对象。
onlines_users = mongo.db.system.users.find()
return render_template('index.html',onlines_usersonlines_users=onlines_users)
#如果想在Index.html文件里显示效果就要加入{{ onlines_users }}调用方法。
#插入数据[这里指定了数据]
@app.route('/add/') #后面加入了一个"/"作用跟不加的效果自己可以测试。
def add():
user = mongo.db.users
user.insert({"username":"swper","password":"123456"})
if user:
return "用户已经存在!"
else:
return "Added User!"
#查询数据,通过后面的<username>传入要查询的用户名
@app.route('/find/<username>')
def find(username):
user = mongo.db.users
userusername = user.find_one({"username":username})
if username:
return "你查找的用户名:" + username["username"] + " 密码是:" + username["password"]
else:
return "你查找的用户并不存在!"
#更新数据[monogodb版本可能有所不同]
@app.route('/update/<username>')
def update(username):
user = mongo.db.users
passwd = "abcd10023"
userusername = user.find_one({"username":username})
username["password"] = passwd
user.save(username)
return "Update OK " + username["username"]
#删除数据
@app.route('/delete/<username>')
def delete(username):
user = mongo.db.users
userusername = user.find_one({"username":username})
user.remove(username)
if username:
return "Remove " + username["username"] + " Ok!"
else:
return "用户不存在,请核对后再操作!"
if __name__ == '__main__':
app.run(debug=True)
方法:
1、当访问地址:http://127.0.0.1:5000/add/
就会把blog.py里的用户 ({“username”:”swper”,”password”:”123456”})插入到数据库中,如果用户存在就会提示已经存在。
2、当访问地址:http://127.0.0.1:5000/find/swper
后在的”swper”为用户名,就会查询出它的用户名,和密码。
3、当访问地址为:http://127.0.0.1:5000/update/swper
就会把update函数里的passwd = “abcd10023” 更新给用户swper。
4、当访问地址为:http://127.0.0.1:5000/delete/swper
就会把用户”swper”从数据库中删除,如果用户不存在就会报不存在。
而 Flask-PyMongo 官方上有示例处理,错误并返回一个404状态。http://www.pythondoc.com/flask-pymongo/
我们根据自己状态修改:
查询数据,通过后面的
@app.route('/find/<username>')
def find(username):
username = mongo.db.users.find_one_or_404({"username":username})
return render_template('index.html',usernameusername=username)