Структура каталогов Python колба для слоя службы? - PullRequest
0 голосов
/ 30 октября 2019

Я разработчик ядра aspnet и пытаюсь сделать тестовый проект на python с использованием фреймворка. Но из-за моего непонимания структуры Python-проектов мне сложно его компилировать. Я не понимаю, почему это важно, если я храню свой файл Python в другом каталоге. В C # вы можете получить доступ ко всем классам в одном и том же пространстве имен, ничего не импортируя.

Вот как выглядит моя структура проекта в Python-фляге. Я не могу с этим работать. Я пытаюсь импортировать мой home_service.py в home.py файл, в котором присутствуют home маршруты (in aspnet's term controller), а регистратор не отображаетсябыть доступным либо. И home_service.py не может импортировать db_util.py .

Может ли какой-нибудь эксперт по питон-колбам направить меня в правильном направлении?

/../../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 или любую другую форму. Я хочу сделать это по-своему. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...