首页 > 解决方案 > 服务层的Python烧瓶目录结构?

问题描述

我是一名 aspnet 核心开发人员,正在尝试使用烧瓶框架在 python 中做一个测试项目。但由于我对 python 项目的结构缺乏了解,我很难编译它。我不明白如果我将我的 python 文件保存在另一个目录中,为什么它会在意。在 C# 中,您可以访问同一命名空间内的所有类,而无需导入任何内容。

这是我的python烧瓶项目结构的样子。我似乎无法以这种方式工作。我正在尝试将我的home_service.py导入到home.py文件中,其中存在家庭路由in aspnet's term controller),并且似乎也无法访问记录器。而且home_service.py也不能导入db_util.py

请任何python烧瓶专家指导我正确的方向?

/../../Projects/flask-test-project
├── test-project/
│   ├── __init__.py
│   └── static/
│       └── site.css
│   ├── templates/
│   │   ├── layout.html
│   │   ├── home.html
│   │   ├── offerings.html
│   │   ├── login.html
│   │   ├── register.html
│   │   ├── 404.html
│   │   ├── 500.html 
│   ├── views/
│   │   ├── __init__.py
│   │   ├── home.py
│   │   ├── offerings.py
│   │   ├── login.py
│   │   ├── register.py
│   ├── service/
│   │   ├── home_service.py
│   │   ├── db_util.py
├── flask-venv-for-ubuntu/
├── requirements.txt
└── run.py

**run.py**
from test-project import app
from datetime import datetime
import logging

todays_date = datetime.today().strftime('%Y%m%d')
logging.basicConfig(filename='error'+ todays_date+'.log',level=logging.Trace)
app.run(debug=True)
app.logger.trace(“Inside run.py”)


**__init__.py**
from flask import g, Blueprint, request
from psycopg2

# $ pip install sentry-sdk[flask]
from werkzeug.exceptions import HTTPException 

app = Flask(__name__)

@app.errorhandler(404)
def not_found(error):
    return render_template('404.html')

@app.errorhandler(HTTPException)
def handle_exception(e):
    app.logger.error(e)
    return render_template(“500.html”)

@app.teardown_appcontext
def close_connection():
    db = getattr(g, '_database', None)
    if db is not None:
        db.close()

from test-project.views import home
from test-project.views import login
from test-project.views import register
from test-project.views import offerings
app.register_blueprint(home.mod)
app.register_blueprint(login.mod)
app.register_blueprint(register.mod)
app.register_blueprint(offerings.mod)

**db_util.py**
from flask import g
import psycopg2 

POSTGRES_CONNECTIONSTRING = “……...”

def get_db():
    db = getattr(g, '_database', None)
    if db is None:
        db = g._database = psycopg2.connect(POSTGRES_CONNECTIONSTRING)
    return db

def query_db(query, args=(), one=False):
   try:
     cur = get_db().execute(query, args)
     rv = cur.fetchall()
     cur.close()
     return (rv[0] if rv else None) if one else rv   
   finally:
    if(cur)
       cur.close()

**home_service.py**
import db_util

def get_something
   app.logger.Debug(“get_something started”)
   return query_db(“select count(*) as myCount from table1;”)


**home.py**
import home_service

mod = Flask(“home”,__name__)

@mod.route(“/something”)
def something():
   app.logger.Debug(“get_something started”)
   return render_template(“home.html”, count_of_table1=get_something().myCount)

请不要推荐我使用 SQLAlchemy 或任何其他形式。我想按照我的方式去做。谢谢!

标签: python-3.xpostgresqlflask

解决方案


推荐阅读