环境准备:
python 2.7.11
redis==2.10.6
Flask==0.10.1
Flask-Session==0.3.1
redis-server 192.168.1.107 : 6379
IDE
pycharm
文件树
说明:
1。在第一个应用中做用户名密码认证,从数据库中校验(网上很多例子,代码不贴了)
2。两个应用用同样的 SECRET_KEY 配置
操作步骤
1.创建两个应用
a) settings.py
a) settings.py
# coding: utf-8
import platform
import redis
import os
class baseconfig(object):
CSRF_ENABLED = True
alarms_dbname = "alarms"
db_username = "falcon"
db_password = "123456"
db_ip = "192.168.1.107"
# db_ip = "192.168.43.11"
# server_ip = "192.168.43.11" # api ip
server_ip = "192.168.1.107"
system_type = 'Windows' if platform.system().find("Win") != -1 else 'Linux'
redis_ip = "192.168.1.107"
redis_port = 6379
session_config = {'SESSION_TYPE': "redis",
'SESSION_REDIS': redis.Redis(host=redis_ip, port=redis_port),
'SESSION_USE_SIGNER': True,
'SECRET_KEY' : os.environ.get("SECRET_KEY", "secret-key")}
# session_config 两个应用都加载此配置
SQLALCHEMY_DATABASE_URI = 'mysql://%s:%s@%s/%s' % (db_username, db_password, db_ip, alarms_dbname)
@staticmethod
def init_app(app):
pass
class developconfig(baseconfig):
DEBUG = True
import os
basedir = os.path.abspath(os.path.dirname(__file__))
SQLALCHEMY_MAX_OVERFLOW = 50
SQLALCHEMY_ECHO = False
SQLALCHEMY_POOL_SIZE = 20
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_COMMIT_ON_TEARDOWN = True
SQLALCHEMY_POOL_TIMEOUT = 3
SQLALCHEMY_POOL_RECYCLE = 1
class portal(baseconfig):
# db
SQLALCHEMY_DATABASE_URI = ''
SQLALCHEMY_POOL_TIMEOUT = 10
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_COMMIT_ON_TEARDOWN = True
config = {'default': developconfig, 'portal': portal, 'develop': developconfig}
b) 创建第一个应用
rrd__init__.py
from flask import Flask, request
from rrd import config
from flask_session import Session
from settings import baseconfig
#-- create app --
app = Flask(__name__)
app.config.from_object("rrd.config") # 此配置文件没有关于session共享的配置,不贴出来了
app.config.update(baseconfig.session_config)
Session(app)
rrd\view__init__.py
@app.before_request
def app_before():
# 从session中提取用户签名
g.user_token = get_usertoken_from_session(session)
g.user = get_current_user_profile(g.user_token)
g.locale = request.accept_languages.best_match(config.LANGUAGES.keys())
C )创建第二个应用
wsgi.py
from bk_site import create_app
custom_app = create_app(os.environ.get("FLASK_CONFIG") or "default")
from werkzeug.wsgi import DispatcherMiddleware
from werkzeug.serving import run_simple
# 将两个应用合并在一起
app = DispatcherMiddleware(falcon_app, {'/ext': custom_app})
\bk_site__init__.py
from flask import Flask
from werkzeug.utils import import_string
from settings import config
from flask_sqlalchemy import SQLAlchemy
from flask_session import Session
import settings
db = SQLAlchemy()
sess = Session()
# celery app
from celery import Celery
import celeryconfig
celery_app = Celery()
celery_app.config_from_object(celeryconfig)
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
db = SQLAlchemy(app)
db.init_app(app)
app.config.update(settings.baseconfig.session_config)
# init_app 一定要在 app.config 配置后面,否则配置不能生效
sess.init_app(app)
# from monitor_bk_site.monitor import monitor_bp
blueprints = [
'bk_site.monitor:monitor_bp',
'bk_site.other:other_bp',
]
from middle_ware import app_before
app_before(app)
for bp_name in blueprints:
bp = import_string(bp_name)
app.register_blueprint(bp)
return app
middle_ware.py
from flask import g, request, redirect, session
from rrd.view.utils import get_usertoken_from_session, get_current_user_profile
from monitor import monitor_bp
from rrd import config
@monitor_bp.before_request
def request_before():
if session:
# 从session中提取用户签名
g.user_token = get_usertoken_from_session(session)
g.user = get_current_user_profile(g.user_token)
g.locale = request.accept_languages.best_match(config.LANGUAGES.keys())
if not g.user:
return redirect("/auth/login")
# # print ut
# current_app.login_type = 1
# current_app.user = g.user_token.name
# current_app.sig = g.user_token.sig
# g.user = get_current_user_profile(g.user_token)
# g.locale = request.accept_languages.best_match(config.LANGUAGES.keys())
else:
return redirect("/auth/login")
flask 配置文件参考
http://www.pythondoc.com/flask/config.html
flask-session 配置文件参考
https://www.cnblogs.com/52forjie/p/8282453.html
https://pythonhosted.org/Flask-Session/