flask框架实战项目架构

一、项目架构:

研习了多天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
原文地址:https://www.cnblogs.com/KevinGeorge/p/8099758.html