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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM