для первых двух, engine
и Session
, вы можете поместить их в settings.py
;они, конфигурация, в конце концов.
На самом деле создание сеанса требует немного большей осторожности, поскольку session
по сути является «транзакцией».Самое простое, что нужно сделать, - это создать его в каждой функции представления, когда это необходимо, и зафиксировать их непосредственно перед возвратом.Если вы хотите немного больше магии, чем это, или если вы хотите / должны использовать сеанс вне функции представления, вам следует вместо этого определить middleware , что-то вроде
class MySQLAlchemySessionMiddleware(object):
def process_request(self, request):
request.db_session = settings.Session()
def process_response(self, request, response):
try:
session = request.db_session
except AttributeError:
return response
try:
session.commit()
return response
except:
session.rollback()
raise
def process_exception(self, request, exception):
try:
session = request.db_session
except AttributeError:
return
session.rollback()
Тогда каждое представление будет иметь в своих запросах атрибут db_session
, который они могут использовать по своему усмотрению, и все, что было добавлено, будет зафиксировано после завершения ответа.забудьте добавить промежуточное ПО к MIDDLEWARE_CLASSES