首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Tornado应用程序中使用Django ORM?

如何在Tornado应用程序中使用Django ORM?
EN

Stack Overflow用户
提问于 2012-05-02 22:06:59
回答 3查看 6.2K关注 0票数 22

我有一个现有的Django应用程序,其中包含一个数据库和相应的models.py文件。

我有一个新的Tornado应用程序,它为其他应用程序提供web服务。它需要从同一个数据库中进行读/写,而且在我想使用的模型文件中有一些代码。

如何在Tornado请求处理程序中最好地使用Django数据库和模型?是否像创建一个指向models.py Django项目文件夹的符号链接、导入Django模块并使用它一样简单?我想我必须做settings.configure(),,对吗?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-02 22:14:19

将Django项目的路径添加到Tornado应用程序的PYTHONPATH env-var,并适当地设置DJANGO_SETTINGS_MODULE。然后你应该能够导入你的模型,然后像往常一样使用Django在第一次导入时进行初始设置。

您不应该需要任何符号链接。

票数 12
EN

Stack Overflow用户

发布于 2012-05-02 22:23:48

有一个关于如何在Tornado中使用django ORM和django form的示例here。你可以阅读Using Django Inside the Tornado Web Server获取一些信息。下面的代码取自于此:

代码语言:javascript
复制
import sys
import os

import tornado.httpserver
import tornado.ioloop
import tornado.web

# django settings must be called before importing models
from django.conf import settings
settings.configure(DATABASE_ENGINE='sqlite3', DATABASE_NAME='dev.db')

from django import forms
from django.db import models

# Define your Model
class Message(models.Model):
    """
    A Django model class.
    In order to use it you will need to create the database manually.

    sqlite> CREATE TABLE message (id integer primary key, subject varchar(30), content varchar(250));
    sqlite> insert into message values(1, 'subject', 'cool stuff');
    sqlite> SELECT * from message;
    """

    subject = models.CharField(max_length=30)
    content = models.TextField(max_length=250)
    class Meta:
        app_label = 'dj'
        db_table = 'message'
    def __unicode__(self):
        return self.subject + "--" + self.content

# Define your Form
class DjForm(forms.Form):
    subject = forms.CharField(max_length=100, required=True)
    content = forms.CharField()

# Define the class that will respond to the URL
class ListMessagesHandler(tornado.web.RequestHandler):
    def get(self):
        messages = Message.objects.all()
        self.render("templates/index.html", title="My title",
                    messages=messages)

class FormHandler(tornado.web.RequestHandler):
    def get(self):
        form = DjForm()
        self.render("templates/form.html", title="My title", form=form)

    def post(self):
        data = {
            'subject':self.request.arguments['subject'][0],
            'content':self.request.arguments['content'][0],
        }
        form = DjForm(data=data)
        if form.is_valid():
            message = Message(**form.cleaned_data)
            message.save()
            self.redirect('/')
        else:
            self.render("templates/form.html", title="My title", form=form)

# map the Urls to the class          
application = tornado.web.Application([
    (r"/", ListMessagesHandler),
    (r"/form/", FormHandler),
])

# Start the server
if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

这是另一个有姜戈和龙卷风的demo ..。

票数 19
EN

Stack Overflow用户

发布于 2015-05-21 00:06:58

在Django 1.8中,我无法使用@aragon提供的信息。由于这个问题是在谷歌搜索Django + Tornado集成时排名靠前的结果之一,下面是我如何让它在Django 1.8中工作的

代码语言:javascript
复制
from django import forms
from django.db import models

from models import Operation #Own model
import django

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': 'database.db',
    }
}
settings.configure(DATABASES=DATABASES)

if django.VERSION[:2] > (1,5):
    django.setup()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10415429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档