Flask项目结构模板

我总是忍不住会想起那座城市的夜晚,灯光燃成的篝火,我坐在天台上,时光短促又漫长,风从我耳边流过带来整个世界的声音。风中,有人弹唱,有人舞蹈,有人相爱。

前后台

一个普通的前后台大致结构

│  
└─app    # 主目录
    │  config.py    # 默认配置文件
    │  run.py        # 启动文件
    │  
    ├─admin        # 后台管理
    │      models.py    # 数据库模型
    │      views.py    # 视图逻辑函数
    │      __init__.py    # 初始化
    │      
    ├─data        # 临时缓存文件
    │      18-10-29-21-35-52ip.txt
    │      18-10-29-21-35-52url.txt
    │      18-10-29-21-35-58ip.txt
    │      
    ├─home        # 前台 # 下文件作用同上
    │      models.py
    │      test.py
    │      views.py
    │      __init__.py
    │      
    ├─static        # 静态文件
    │  │  
    │  ├─css
    │  │      bootstrap-theme.css
    │  │      bootstrap-theme.css.map
    │  │      bootstrap-theme.min.css
    │  │      bootstrap-theme.min.css.map
    │  │      bootstrap.css
    │  │      bootstrap.css.map
    │  │      bootstrap.min.css
    │  │      bootstrap.min.css.map
    │  │      main.css
    │  │      
    │  ├─fonts
    │  │      glyphicons-halflings-regular.eot
    │  │      glyphicons-halflings-regular.svg
    │  │      glyphicons-halflings-regular.ttf
    │  │      glyphicons-halflings-regular.woff
    │  │      glyphicons-halflings-regular.woff2
    │  │      
    │  ├─image
    │  │      test.jpg
    │  │      
    │  └─js
    │          bootstrap.js
    │          bootstrap.min.js
    │          jquery.js
    │          npm.js
    │          
    └─templates    # 模板
            404.html
            cms_map.html
            index.html
            ip_map.html
            layout.html
            login.html
            result.html
            search.html
            subdomain.html
            urls.html

config.py 文件中是一些设置参数,常用大致内容如下

# coding:utf-8
import os
# 这些都是数据库信息
HOST = '127.0.0.1'
# 数据库账号密码端口
DATABASE = 'langzi_eyes'
USER = 'root'
PASSWORD = 'root'
PORT = 3306
DRIVER = 'pymysql'

# FLASK 的选项,调试模式和开启多线程,以及安全码
THREADED = True
DEBUG = False
SECRET_KEY = os.urandom(12)

# SQLALchemy 的配置驱动与修改默认连接池与超时
SQLALCHEMY_DATABASE_URI = 'mysql+' + DRIVER + '://' + USER + ':' + PASSWORD + '@' + HOST + ':' + str(PORT) + '/' + DATABASE + '?charset=utf8'
SQLALCHEMY_TRACK_MODIFIACTIONS = False
SQLALCHEMY_POOL_SIZE = 50
SQLALCHEMY_POOL_TIMEOUT = 30
SQLALCHEMY_POOL_RECYCLE = -1

run.py则是启动文件,负责注册蓝图,启动服务。

# -*- coding: utf-8 -*-
import os
from flask import Flask
import config
import sys
reload(sys)
sys.setdefaultencoding('utf-8')


# 注册蓝图
def start_Blueprint(app):
    from home import home
    from admin import admin
    app.register_blueprint(home)
    app.register_blueprint(admin,prefix_url='/admin')

def create_app():
    app = Flask(__name__,template_folder=('templates'),static_folder=('static'))
    app.config.from_object(config)
    start_Blueprint(app)
    return app


if __name__ == '__main__':
    app = create_app()
    print 'Waiting......'
    app.run(host='0.0.0.0',threaded=True,port=5000)

在/home/__init__.py文件负责启用蓝图,并且导入运行home/views.py

# coding:utf-8
import sys
sys.path.append('..')
reload(sys)

# 下面两行注册蓝图
from flask import Blueprint
home = Blueprint('home',__name__)

# 导入并且运行主要逻辑函数
import views

在/home/views.py是主要的视图逻辑处理函数

# coding:utf-8
# 导入蓝图
from . import home

# 导入其他配置文件
from flask import session,url_for,redirect,render_template
# 导入数据库模型操作,这个要根据需求来导入编辑

# 编写登陆状态监测装饰器
from functools import wraps
def login_required(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        if 'login' in session:
            '''
            这里的login等等需要根据你自己设置的session判断
            '''
            if session['login'] == True:
                return func(*args, **kwargs)
            else:
                return redirect(url_for('home.error'))
        else:
            return redirect(url_for('home.error'))
    return wrapper


# 主要逻辑视图函数
@home.route('/')
def index():
    return 'hello home'

@home.route('/error/')
def error():
    return '404 not found'

在/home/models.py则是你创建的数据库ORM模型,顺便写一个上下文管理函数。

# coding:utf-8
# 导入必备的模块
import sys
reload(sys)
sys.path.append('..')
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import time
import contextlib
# 导入配置文件中的设置信息
from .. import config



# 创建数据库ORM模型
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = config.SQLALCHEMY_DATABASE_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.config.from_object(config)
db = SQLAlchemy(app)

class url_index(db.Model):
    __tablename__ = 'urls'
    id = db.Column(db.Integer,autoincrement=True,primary_key=True)
    url = db.Column(db.String(80),unique=True,nullable=False)
    checks = db.Column(db.Integer,default=0,index=True)
    time = db.Column(db.String(50),default=str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))

    def __repr__(self):
        return '%s'%self.url




# 这一行代码是创建数据
db.create_all()

# 写一个装饰器用来每次的数据插入执行等等
@contextlib.contextmanager
def data2mysql():
    try:
        yield db
    except:
        db.session.rollback()
    finally:
        db.session.remove()

'''
使用方法

        url = 'http://www.langzi.fun'
        first_ins = url_index(url=url)
        with data2mysql() as dbs:
            dbs.session.add(first_ins)
            dbs.session.commit()

'''

普通的页面功能

根据上面的修改结构即可,模板主要是能让自己心里有个大致的结构,如何实现还是要看业务需求,当然上面的结构模板中写的一些函数作用是可以复用的,比如登陆状态检测装饰器等等….

坚持原创技术分享,您的支持将鼓励我继续创作!
------ 本文结束 ------

版权声明

LangZi_Blog's by Jy Xie is licensed under a Creative Commons BY-NC-ND 4.0 International License
由浪子LangZi创作并维护的Langzi_Blog's博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于Langzi_Blog's 博客( http://langzi.fun ),版权所有,侵权必究。

0%