вторник, 27 декабря 2011 г.

Django ORM без Джанги

Буду краток.

Проблема: использовать прелести Django ORM, а он хорош, но для проекта, который не для веба.

Есть ответы на  stackoverflow
http://stackoverflow.com/questions/579511/using-only-the-db-part-of-django
а вот это я не пробовал
http://pypi.python.org/pypi/django-standalone



Опишу свой путь:
файл
settings.py

# -*- coding: utf-8 -*-

import os
gettext = lambda s: s
PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))


DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
# ('Your Name', 'your_email@example.com'),
)

LANGUAGES = [
('ru', 'ru'),
]
DEFAULT_LANGUAGE = 0

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': os.path.join(PROJECT_PATH, 'crimson.sqlite'),
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}

TEST_DATABASE_CHARSET = "utf8"
TEST_DATABASE_COLLATION = "utf8_general_ci"

TIME_ZONE = 'Europe/Moscow'

LANGUAGE_CODE = 'ru-RU'

SITE_ID = 1

USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale
USE_L10N = True


INSTALLED_APPS = (
# 'django.contrib.auth',
# 'django.contrib.contenttypes',
# 'django.contrib.sessions',
# 'django.contrib.sites',
# 'django.contrib.messages',
# 'django.contrib.staticfiles',
'src.data_utils',
'src.crimsonmap',
)



Создаём у себя в корне проекта такой файл.

Затем, там же в папке проекта
manage.py 
#!/usr/bin/env python
from django.core.management import execute_manager
import imp
try:
imp.find_module('settings') # Assumed to be in the same directory.
except ImportError:
import sys
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
sys.exit(1)

import settings

if __name__ == "__main__":
execute_manager(settings)



Ещё создаём пустой файл __init__.py


И файл
urls.py
from django.conf.urls.defaults import patterns, include, url

# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
# Examples:
# url(r'^$', 'src.views.home', name='home'),
# url(r'^src/', include('src.foo.urls')),

# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

# Uncomment the next line to enable the admin:
# url(r'^admin/', include(admin.site.urls)),
)


Теперь создаём папку с аппом, в котором будет лежать модель
у меня это src -<--- корень проекта, crimsonmap, это поддиректория
src/crimsonmap
В этой поддиректории создаём пустой файл:
__init__.py - это для того чтобы джанга поняла, что тут лежит апп
models.py
# coding: utf-8
from django.utils.translation import ugettext_lazy as _
from django.db import models

class Terrarian(models.Model):
   ter_type = models.CharField(verbose_name=_('terrarian type'), max_length=20)
   ter_color = models.CharField(verbose_name=_('terrarian color html'), max_length=20, default = 'red')
   ter_hunting = models.FloatField(verbose_name=_('ter hunting percent'), default=0)
   ter_meeting = models.FloatField(verbose_name=_('ter meeting percent'), default=0)
   player_maybehere = models.BooleanField(_('player may be here'), default=True)


Дальше как обычно из /src:
python manage.py syncdb
создастся база данных и радость

И затем, когда нужно использовать нашу базу:

import os
os.environ["DJANGO_SETTINGS_MODULE"] = "settings"
from models import Terrarian

Есть ещё пацанский метод заполнения базы данных, если кому нужно пишите в комментах, опишу, так лень.

Комментариев нет:

Отправить комментарий