首先关于flask框架,我之前没有用过python的web框架,只是知道有django和flask两种框架,由于之前学过java的spring框架,知道有个MVC这么个东西,然后对于flask就有点束手无策,文件可以随便建立,需要遵循什么结构或者方针吗?百度之后得到了下面这段话这么个结论:
Django框架的强大就肯定意味着它是一款重量级框架,而对于初学者来说,这可能是一种灾难。如果初学者没有其他语言的基础,没有后端开发的经验,那么这种方式可能直接就导致放弃。
Pythonweb的入门,使用web.py是非常好的选择。不管是Django还是Flask,他们设计的基础都是web.py。不同的是Django设计的更复杂,更像是一间做好硬装的房子,你只需要稍微做一下软装,布置一下家具就能把整个房间设计的很漂亮。
Flask就不太一样了,它仅仅帮你做好了建房子所需要的材料,房子如何搭建,如何装修全都得靠你自己动手,所以同一个项目,使用Flask来做,不同的人可能设计出来的架构完全不同,而使用Django框架做出来的架构可能都差不多了。
对于用过MVC框架的开发者来说,上手Django是很快的,因为Django也是MVC模式。Flask就没有什么模式可言了,仅仅提供了一种服务而已,要搞成什么样子全靠自己。所以如果你想自己去设计目录结构,模块的划分等个性化设计时,推荐使用Flask。弊端也很明显,如果你不是一个经验丰富的开发者,你很可能会把整个项目架构设计的乱七八糟。
对于我来说,很多时候一个项目刚开始并不觉得是个大项目,做到后面功能越来越多,扩展越来越多,就变成了一个大项目,而使用Flask就很容易的完成这个任务,小型项目快速开发,大项目设计灵活
然后我又借鉴了一篇博客的讲解(https://www.cnblogs.com/mysql-dba/p/6070258.html),逐渐建立起了自己对于flask框架的初步理解(一点基础都没有,只能自己一步步摸索,有个别错误,还需各位指出~)。
这是我文件的结构,关于他们的介绍保存在introduce.txt里,是这样写的:
1)最上层dacxxx目录是项目名称,一个项目下可以包括多个模块,也就是应用,每个应用下有自己的配置文件,初始化文件,MVC架构。
2)dacxxx.py:与应用模块平级,作为项目启动文件
3)第二级MongoDBCURD目录:模块名称
controller目录:MVC中的C,主要存放视图函数
model目录:MVC中的M,主要存放实体类文件,映射数据库中表
templates:MVC中的V,存放html文件
static:静态文件,主要存放css,js等文件
__init__.py:模块初始化文件,Flask 程序对象的创建必须在 __init__.py 文件里完成, 然后我们就可以安全的导入引用每个包。
setting.py:配置文件,数据库用户名密码等等
于是,遵循这个方针,我开始了对于mongodb数据库的各种操作,下面是各个文件的代码及注释内容:
setting.py:就是一些配置信息
# _*_ coding: utf-8 _*_
#调试模式是否开启
DEBUG = True
MONGO_DBNAME='dachuang'
MONGO_URI='mongodb://127.0.0.1:27017/dachuang'
实体O2O.py
from MongoDBCURD import db
class O2O(db.Model):
__tablename__ = 'o2O1'
id = db.Column(db.Integer,primary_key=True)
area = db.Column(db.String(16))
storename = db.Column(db.String(16))
address = db.Column(db.String(16))
describe = db.Column(db.String(16))
pictures = db.Column(db.ARRAY)
sell_num = db.Column(db.Integer)
price_avepeo = db.Column(db.DECIMAL)
storeclass = db.Column(db.String(16))
storetype = db.Column(db.String(16))
def __init__(self,area,storename,address,describe,pictures,sell_num,price_avepeo,storeclass,storetype):
self.area = area
self.storename = storename
self.address = address
self.describe = describe
self.pictures = pictures
self.sell_num = sell_num
self.price_avepeo = price_avepeo
self.storeclass = storeclass
self.storetype = storetype
def __repr__(self):
return '' % self.area,self.storename,self.address,self.describe,self.pictures,self.sell_num,self.price_avepeo,self.storeclass,self.storetype
controller:
o2Omanager.py:
from flask import Flask,request
from MongoDBCURD import app,db
import json
#根据地点和大类获取实体
@app.route('/getAllO2OStores_area_storeclass',methods=['GET'])
def getAllO2OStores_area_storeclass():
area=request.args.get('area')
storeclass=request.args.get('storeclass')
print(area,storeclass)
data=db.db.o2O.find({'area':area,'storeclass':storeclass})#返回的是个游标,所以要for循环
result=[]
for x in data:
result.append(x)
print(result)
return json.dumps(result,ensure_ascii=False)
这个是查,增删改查都有相应的函数,比如delete之类的,具体百度就好了,
改:
改动数据
@app.route('/update')
def update():
user = mongo.db.users
Bill = user.find_one({'username': 'Bill'})
Bill['password'] = '2222'
user.save(Bill)
return 'Updated Bill!'
————————————————
版权声明:本文为CSDN博主「wzshenn」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/github_34712959/article/details/51485686
删:
删除数据
@app.route('/delete')
def delete():
user = mongo.db.users
Bill = user.find_one({'username': 'Bill'})
user.remove(Bill)
return 'Removed Bill!'
————————————————
版权声明:本文为CSDN博主「wzshenn」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/github_34712959/article/details/51485686
增:
增加数据
@app.route('/add')
def add():
user = mongo.db.users
user.insert({'username':'Bill' , 'password':'1111'})
return 'Added User!'
__init_.py:注意后面controller的引用必须在app对象创建后面
# -*- coding: utf-8 -*-
from flask import Flask
from flask_pymongo import PyMongo
#创建项目对象
app = Flask(__name__)
#加载配置文件内容
app.config.from_object('MongoDBCURD.setting') #模块下的setting文件名,不用加py后缀
db = PyMongo(app)
##只有在app对象之后声明,用于导入view模块
from MongoDBCURD.controller import o2Omanager
from MongoDBCURD.controller import doSearch
启动文件dacxxx.py
from MongoDBCURD import app
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(debug=True)