相关疑难解决方法(0)

当Django只启动ONCE时执行代码?

我正在编写一个Django Middleware类,我想在启动时只执行一次,以初始化其他一些arbritary代码.我已经按照sdolan 在这里发布的非常好的解决方案,但"Hello"消息输出到终端两次.例如

from django.core.exceptions import MiddlewareNotUsed
from django.conf import settings

class StartupMiddleware(object):
    def __init__(self):
        print "Hello world"
        raise MiddlewareNotUsed('Startup complete')
Run Code Online (Sandbox Code Playgroud)

在我的Django设置文件中,我已将该类包含在MIDDLEWARE_CLASSES列表中.

但是当我使用runserver运行Django并请求页面时,我进入了终端

Django version 1.3, using settings 'config.server'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Hello world
[22/Jul/2011 15:54:36] "GET / HTTP/1.1" 200 698
Hello world
[22/Jul/2011 15:54:36] "GET /static/css/base.css HTTP/1.1" 200 0
Run Code Online (Sandbox Code Playgroud)

任何有关"Hello world"打印两次的想法?谢谢.

python django

153
推荐指数
7
解决办法
7万
查看次数

在django中,如何从初始化脚本中调用子命令"syncdb"?

我是python和django的新手,在关注Django Book时,我了解了命令'python manage.py syncdb',它为我生成了数据库表.在开发环境中,我在内存数据库中使用sqlite,因此每次重新启动服务器时都会自动删除它.那么我如何编写这个'syncdb'命令的脚本?(这应该在'settings.py'文件中完成吗?)

澄清

OP正在使用内存数据库,需要在使用针对该数据库定义的Django模型的任何进程开始时对其进行初始化.确保数据库初始化的最佳方法是什么(每个进程启动一次).这可以通过manage.py runserver或通过Web服务器进程(例如使用WSGI或mod_python)运行测试或运行服务器.

python django django-syncdb in-memory-database

46
推荐指数
3
解决办法
2万
查看次数

Django"完全加载"后如何运行任意代码

在我的Django环境"完全加载"之后,我需要执行一些相当简单的任务.

更具体地说,我需要做一些像Signal.disconnect()我的第三方库默认设置的Django Signals和connect我自己的Signals,我需要做一些"猴子修补",以便从另一个库中为一些Django模型添加便利功能.

我一直在我的Django应用程序的__init__.py文件中做这些东西,这似乎适用于猴子修补,但不适用于我的信号断开连接.问题似乎是时间问题 - 无论出于什么原因,第三方图书馆Signal.connect()在我尝试之后似乎总是称之为Signal.disconnect()它.

所以有两个问题:

根据INSTALLED_APPS我的应用程序__init__.py模块加载时的顺序,我有任何保证吗?

Django应用程序完全加载到内存,是否有适当的位置来放置需要运行的逻辑?

python django monkeypatching django-signals

18
推荐指数
3
解决办法
7318
查看次数

将SqlAlchemy集成到Django项目中的最佳方法

我改变了我的Django应用程序以使用SQLAlchemy,现在它可以工作了.

但我想知道我应该把这些线放在哪里:

engine = sqlalchemy.create_engine(settings.DATABASE_URL)
Session = sqlalchemy.orm.sessionmaker(bind=engine)
session = Session()
Run Code Online (Sandbox Code Playgroud)

我问的原因是因为我想在很多地方使用SQLAlchemy,而且我不认为每次我需要使用数据库时都要正确/强大/写好这三行.

我要求SA的地方是:

  • 当然,在我看来
  • 在我写的一些中间件中
  • 在我的模特中.喜欢get_all_tagsBlogPost模型.

我认为是正确的,是通过在会话关闭时重新连接到数据库来获取会话,或者只返回当前连接的会话(如果存在).

如何在我的Django应用程序中正确使用SQLAlchemy?

谢谢你的帮助!

注意:我已经按照本教程在我的Django应用程序中实现了SA,但是这个并没有告诉我这些3行的确切位置(http://lethain.com/entry/2008/jul/23/replacing-django -s-orm-with-sqlalchemy /).

python django sqlalchemy

16
推荐指数
1
解决办法
1万
查看次数

Django - 在启动时执行代码

我正在使用Django 1.9.3.我有一个包含多个应用程序的项目.我想在项目启动时更新其中一个应用程序的表.

用例:

例如,假设我想在我的网站上销售商品.我有一个包含模型项的应用程序.我在Django外面有一个Web服务,提供服务"give_all_items_available()".我想向我的用户提供使用该网站的项目列表.因此,我认为我必须定期(在启动时和每隔一段时间)使用该Web服务输入更新我的数据库.

我编写了所有代码,它看起来如下(这是一个例子):

from my_app.models import My_table

def on_startup():
     my_thread = Thread(execute = populate_tables, loopmode = True, background = True) # thread running in loopmode in background
     my_thread.start() # starts the thread and returns

def populate_tables()
     response = call_webservice() # let's imagine this method returns data for creating a new model instance
     My_table(response).save() # this save() isn't threadsafe in this example, but that's not my point ;-)
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道在哪里写这段代码

尝试:

到目前为止,使用Django 1.6.5,我从我的应用程序的init .py文件中获得了一些代码.它工作正常,但我觉得它很难看(开始一个带有"导入"的线程看起来非常像隐藏代码).

我在Django 1.9中看到了"ready()"方法.但它在文档中写的不处理这种方法中的模型,所以我很困惑.

我可以在启动我的服务器的命令中添加启动代码,但是这个启动代码是面向应用程序的,在我看来,这些项目与它无关.

你会推荐什么?

如果需要,我很乐意提供更多信息. …

python django

8
推荐指数
1
解决办法
1945
查看次数

在django中放置额外启动代码的正确位置?

我希望在我的django进程启动时运行一些环境检查,并在发生错误时大声死亡.我在想数据库的编码不正确,或者机器有我们不支持的python版本.

我宁愿我们的团队面临他们必须解决的致命错误,而不是能够忽略它.

我写这些支票很好,但我很好奇最好放的地方在哪里.如何让它们作为django启动过程的一部分执行?我以为可能有一个我可以听的信号,但我在文档中找不到相关的信号.

python django

7
推荐指数
1
解决办法
4481
查看次数

Django设置后立即运行启动代码?(也用于命令)

我正在使用mongoengine并希望connect()在设置之后运行(不在其文档中建议的内部).这实际上更像是如何在加载所有设置后立即运行代码的一般问题.

更新:我还需要管理命令的解决方案.常见的方法是添加具有异常的中间件MiddlewareNotUsed或向root urls.py添加代码,但两者都不适用于命令.

django settings signals

6
推荐指数
1
解决办法
1806
查看次数

Django:当django启动时只调用一次方法

我想在Django启动时初始化一些变量(来自数据库).

我能够从数据库中获取数据,但问题是如何调用initialize方法.这应该只调用一次.

尝试查看其他页面,但无法找到答案.

代码目前看起来像这样::


def get_latest_dbx(request,....):

#get数据库中的数据


def get_latest_x(request):

get_latest_dbx(请求中,x,......)


def启动(请求):

get_latest_x(请求)

python django django-views django-database

6
推荐指数
1
解决办法
6706
查看次数

在Django 1.7中启动时执行代码

似乎Django允许在启动时执行代码 - 当应用程序启动时,但是,它不清楚我应该把代码放在哪里.那么如何在Django 1.7中启动时执行代码呢?

python django

6
推荐指数
1
解决办法
4581
查看次数

在哪里添加必须与数据库交互的 django 应用程序启动代码?

我有一些 django 代码,当我的应用程序加载到开发服务器中或作为 wsgi 工作人员时,需要运行一次。这段代码还需要写入数据库。在我的特定情况下,我不需要为许多管理命令(例如collectstatic或createsuperuser等)运行代码。

这个问题“Where to put Django Startups code?” 建议使用 AppConfig.ready 作为启动代码。

但是,ready 函数的文档明确警告不要与数据库交互:

尽管您可以如上所述访问模型类,但请避免在 read() 实现中与数据库交互。这包括执行查询的模型方法(save()、delete()、管理器方法等),以及通过 django.db.connection 的原始 SQL 查询。你的ready()方法将在每个管理命令启动期间运行。例如,即使测试数据库配置与生产设置分开,manage.py test 仍然会对生产数据库执行一些查询!

对于需要更新数据库的代码,是否应该使用一些稍后的启动挂钩?

该代码将我的服务器注册为第三方服务的 Webhook 端点,并将所需的连接信息存储在数据库中。如果尚未配置,我仅注册 Webhook。

django django-apps

6
推荐指数
1
解决办法
1336
查看次数

我应该将“初始化代码”放在 Django 应用程序中的什么位置?

我希望我的 Django 应用程序中的一些代码在服务器启动时只执行一次,而不是每个请求。

具体来说,我想将一些数据库表加载到内存中。这些表包含一些不会随请求更改的“元数据”。像这样:

ProductTypesData = None;
def loadProductTypesData():
     productTypes = ProductType.objects.all();
     for ptype in productTypes:
         ptype_data = {
             "id":ptype.id,
             "name": ptype.name,
             "description":ptype.desc
         };
         ProductTypesData.append(ptype_data);
loadProductTypesData();
Run Code Online (Sandbox Code Playgroud)

我应该把这段代码放在哪里?其他关于django初始化的Q/A建议放在urls.py中。但是在 urls.py 中导入模型对我来说似乎不合逻辑。

我可以将代码放在models.py中吗?它是否只执行一次(如果在 django start 上执行是可以接受的)?

python django web

5
推荐指数
0
解决办法
2490
查看次数