一、项目架构:
研习了多天flask,今天终于按照标准流程写了一个实验demo,并实现了ORM调用,一起喜欢自己写原生SQL。废话不多说,来看项目文件结构
1 mysite/ 2 ./config/ 3 default.py#默认上线的配置文件 4 development.py#开放过程的配置文件 5 debug.py#调试过程的配置文件 6 ./instance/ 7 config.py#特殊的复写的配置文件 8 ./utils/#自定义的lib库 9 tools1.py 10 tools2.py 11 ./main/#app所在库 12 __init__.py#app定义 13 modles.py#ORM数据库代码文件 14 ./views/#视图(路由)代码文件 15 user.py#模块一的蓝图文件,定义视图路由函数 16 ./static/#静态文件所在文件夹 17 ./templates/#模板文件所在文件夹 18 ./docs/#文档文件文件夹 19 ./libs/#css/js/ca等类型文件文件夹 20 requestment.py#以来库要求文件夹 21 manage.py#启动脚本
二、多层文件架构需要注意的坑
1、引入本文件夹下的__init__.py下的对象from . import xxx
2、引入文件寻址路径添加方式:
1 import sys 2 sys.path.append(filepath)
3、注意互相引用时候的定义以来,比如A引用B的m,B引用的A的n,m需要n去定义,那么A中引入m一定要在n定义之后。
三、default.py的内容:
1 DEBUG = True 2 SECRET_KEY = 'xxxx' 3 SQLALCHEMY_DATABASE_URI ="mysql://root:root@127.0.0.1:3306/webuser"#mysql连接的定义mysql://user:pass@host:port/databasename 4 SQLALCHEMY_TRACK_MODIFICATIONS = True
四、__init__.py app定义、数据库对象创建、蓝图函数注册:
1 # -*- encoding:utf-8 -*- 2 import sys 3 sys.path.append("./") 4 from flask import Flask 5 from flask_sqlalchemy import SQLAlchemy 6 7 myapp = Flask(__name__) 8 myapp.config.from_pyfile("../config/default.py")#读取配置文件 9 userdb = SQLAlchemy(myapp)#创建数据库连接对象 10 from views.user import User#引入模块User 11 myapp.register_blueprint(User)#蓝图注册函数
五、ORM定义数据库的方式modles.py
1 # -*- encoding:utf-8 -*- 2 3 #import lib files 4 from . import userdb#从__init__.py引入userdb对象 5 6 class UserTable(userdb.Model): 7 id = userdb.Column(userdb.Integer,primary_key=True,autoincrement=True) 8 name = userdb.Column(userdb.String(20)) 9 def __init__(self,name): 10 self.name = name 11 def __repr__(self): 12 return '<UserTable %r>'%self.name 13 def show(self): 14 return self.name 15 16 #创建表(一个类一个表): 17 """ 18 #类的属性就是表的列字段 创建函数就是数据库连接对象.Column(约束) 19 id = userdb.Column(userdb.Integer,primary_key=True,autoincrement=True) 20 name = userdb.Column(userdb.String(20)) 21 """
六、user.py模块 定义视图路由函数的文件
1 # -*- encoding:utf-8 -*- 2 import sys 3 sys.path.append("../") 4 sys.path.append("../../") 5 from . import userdb#引入数据库连接对象 6 from models import UserTable#引入数据表对象 7 from flask import Blueprint,request,jsonify 8 9 User = Blueprint("user",__name__)#创建蓝图 10 11 @User.route("/register",methods=["GET","POST"])#蓝图路由 12 def register(): 13 if request.method == "GET": 14 user = request.args.get("username") 15 else: 16 user = request.forms.get("username") 17 try: 18 userdb.create_all() 19 except Exception,ex: 20 pass 21 retlist = UserTable.query.filter_by(name=user).all() 22 if len(retlist) > 0: 23 return jsonify({"message":"failed","reason":"username repeat!"}) 24 else: 25 userobj = UserTable(user) 26 userdb.session.add(userobj) 27 userdb.session.commit() 28 return jsonify({"message":"success","reason":"Hello %s"%user})
七、启动脚本manage.py
1 from mainapp.app import myapp 2 3 if __name__ == "__main__": 4 myapp.run("127.0.0.1",port=5443) 5 #另外一种方式: 6 """ 7 from flask_script import Manager 8 manager = Manager(app) 9 #... 10 if __name__ == '__main__': 11 manager.run()" 12 (venv) $ python hello.py runserver --host 0.0.0.0 -p 5443 13 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) 14 """
八、requestments.txt
1 pip freeze > requestments.txt