我总是忍不住会想起那座城市的夜晚,灯光燃成的篝火,我坐在天台上,时光短促又漫长,风从我耳边流过带来整个世界的声音。风中,有人弹唱,有人舞蹈,有人相爱。
前后台
一个普通的前后台大致结构
│
└─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 = 'https://sxadmin.github.io'
first_ins = url_index(url=url)
with data2mysql() as dbs:
dbs.session.add(first_ins)
dbs.session.commit()
'''
普通的页面功能
根据上面的修改结构即可,模板主要是能让自己心里有个大致的结构,如何实现还是要看业务需求,当然上面的结构模板中写的一些函数作用是可以复用的,比如登陆状态检测装饰器等等….