Flask 分离开发
2018-09-28 本文已影响0人
sunshaoping
flask框架在构建大中型项目时,需要将模型和路由,视图处理函数分离开,这样模块化开发,减少主文件的代码量
目录框架
celue4.0
|--celue # 策略模块
|----celue.py # 策略函数
|----api.py # api函数
|--Log # 日志文件
|--models # 数据模型
|----static # 静态文件
|----template # 网页文件
|--tools # 工具模块
|----redis # redis类
|----tools # 工具类(包括加解密方法)
|--views # 视图模块
|----admin.py # 管理员模块
|----mc_user.py # 移动端模块
|----pc_user.py # 电脑端模块
|--mangage.py # 启动文件(app.py)
正常启动manage.py,启动项目
1.manage.py 文件(app.py)
# 应用启动文件
from models.models import db,create_app # 导入数据模型
from views.admin import * # admin模块
from tools.redis_return import redis_ret # redis模块
from tools.tools import checkMobile # 判断移动端与PC端模块
from flask import redirect,render_template,session # flask中需要的模块
from views.admin import admin
from views.MC_user import *
from views.PC_user import *
app = create_app()
r = redis_ret()
# 根路由
@app.route("/")
def index():
args = request.args.get("args", None) # 获取请求中的args参数
print(args)
session["user"] = User.query.filter_by(uid=str(args)).first().id
if checkMobile(request): # 判断请求是手机端还是PC端
return redirect("mc") # 移动端
else:
return redirect("pc") # PC端
# Blueprint对象的注册和路由(类似主路由)
app.register_blueprint(admin,url_prefix="/admin") # 管理员路由
app.register_blueprint(mc_user,url_prefix="/mc") # 移动端路由
app.register_blueprint(pc_user,url_prefix="/pc") # PC端路由
if __name__ == '__main__':
app.run(debug=True, host="0.0.0.0",port=5000)
2.子路由视图处理函数
from flask import Blueprint,session,render_template,request,redirect
from modes.modes import *
from tools.redis_return import redis_ret
import time
# 实例化redis
r=redis_ret()
# 注册子路由
pc_user = Blueprint('pc_user', __name__)
# 主页(子路由注册视图)
@pc_user.route("/")
def index():
exc_list = Exchange.query.filter_by(user_id=session['user']).all()
return render_template('pc/MCU.html',bot=bot_list,exc=exc_list)
3.models文件
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import datetime
db = SQLAlchemy()
#用户
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
uid = db.Column(db.String(80), unique=True)
locked = db.Column(db.String(80))
level = db.Column(db.String(80))
date = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now)
def create_app():
app=Flask(__name__)
app.secret_key='lianshangkeji' # 设置secret_key,不设置的话可能会提示secret_key没设置
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@127.0.0.1:3306/ccc' # 设置数据库连接
db.init_app(app)
db.create_all(app=app)
return app
4.页面index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
{% if error %}
<h2>{{error}}</h2>
{% else %}
{% endif %}
</body>
</html>