一、項目架構:
研習了多天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
