zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    linux下使用OpenCV的一些问题
    Google Colab调用cv2.imshow奔溃
    [LeetCode] Word Search
    信号
    信号
    [Leetcode] Subsets
    [LeetCode] Combinations
    [LeetCode] Minimum Window Substring
    [LeetCode] Set Matrix Zeroes
    sigaction 函数
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/8099758.html
Copyright © 2011-2022 走看看