我正在构建一个Django应用程序,它将被多个外部应用程序访问。Django应用程序应该提供UI,并使用从外部应用程序接收的数据填充数据库。
第一个想法是使用django_rest_framework
,但这似乎是创建一个紧密耦合的系统,因为每个外部应用程序都必须通过REST调用来联系Django应用程序。
我的另一个想法最好用一幅图来描述:http://imgur.com/vakZvQs几个发布者会在RabbitMQ上创建消息,我的Django会使用这些消息并在DB中创建适当的模型。
我已经使用了pika
库中的async示例,发布者和消费者的消息都按照预期的方式流动。将Django扔到混合中会产生如下错误:
RuntimeError: Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label
django.core.exceptions.ImproperlyConfigured: Requested setting LOGGING_CONFIG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
代码摘录:
# pika consumer
def on_message(self, unused_channel, basic_deliver, properties, body):
# invoking view function
from myapp.views import create_one_foo
create_one_foo()
self.acknowledge_message(basic_deliver.delivery_tag)
# views.py
from .models import Foo
def create_one_foo():
foo = Foo()
foo.bar = "bar"
foo.save()
3条答案
按热度按时间krcsximq1#
我有类似的问题,它是解决了调用这两行之前,你导入的模型。
然后再
我还在学习django,如果我找到一个详细的解释,我会编辑我的答案
ux6nzvsh2#
使用this article创建使用者
lp0sw83n3#
再看celery :http://www.celeryproject.org这是一个帮助创建基于RabbitMQ的工作者的框架
在Django应用所在的主机上运行一个celery worker服务。如果你需要更改Django DB的状态,只需导入Django模型,然后由worker将数据放入数据库即可。否则,你可以在Django应用中运行celery worker。