python flask项目结构规范_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()

'''

普通的页面功能

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值