Найти - Пользователи
Полная версия: Django Rest
Начало » Django » Django Rest
1 2 3
dmis18
Всем добрый день! Я новичок в джанге. У меня есть база Oracle на сервере. У меня есть фреймворк от Sencha ExtJs и все это я хочу законектить через Rest Framework, так вот, одним из условий насколько я понял является сериализация модели в моей базе, но я не понимаю как мне получить модель(models.py), пытаюсь обратиться к базе так:
 python manage.py inspectdb --database=master>models.py

 'master': {
        'ENGINE': 'django.db.backends.oracle',
        'NAME': 'IOSSDB',
        'USER': 'FORTEST',
        'PASSWORD': 'FORTEST',
        'HOST': '12.12.12.212',
        'PORT': '1354',
    }

Получаю пустой models.py.

к слову, когда делаю просто коннект в консоли питона
 db = cx_Oracle.connect('FORTEST', 'FORTEST', '12.12.12.212:1354/IOSSDB')

конектит и я свободно могу работать с базой, но для фреймворка(ExtJs в моем случае) насколько я понял, нужно получить модель, чтобы потом запрос на роутер отправлять.

Собственно вопрос в том, как мне быть? с джанго знаком не давно по этому буду рад любой помощи
Vladimirv
Думаю, что файл models.py ищешь не в той директории, раз нет ошибок. У меня с sqlite3 работает. Попробуй изменить имя файла модели на любое и запусти поиск) Вообще файл models.py должен быть рядом с manage.py, в твоём случае.
Или выполни просто:
python manage.py inspectdb –database=master
вывод в консоль, дальше скопируй.
dmis18
Vladimirv
Думаю, что файл models.py ищешь не в той директории, раз нет ошибок. У меня с sqlite3 работает. Попробуй изменить имя файла модели на любое и запусти поиск) Вообще файл models.py должен быть рядом с manage.py, в твоём случае. Или выполни просто:python manage.py inspectdb –database=masterвывод в консоль, дальше скопируй.

Тут такая штука, оказалось inspectdb не работает с Oracle. И тут же и вопрос, вот у меня есть модель в models.py, я пытаюсь ее синхронизировать через makemigrations получаю ошибку от оракла (ORA-01031: insufficient privileges).

Окей, как я понимаю он говорит, что у меня нет прав. Но как тогда мне получить обьекты таблицы из базы, не прибегая модели.. В послдествии мне эти данные нужно серилизовать для Rest фреймворка. Есть идеи у кого?
FishHook
dmis18
Окей, как я понимаю он говорит, что у меня нет прав.
Ну так дайте права юзеру, которого прописали в настройках DATABASES
dmis18
Тога вопрос, почему же когда я обращаюсь к базе через консоль питона, вот так:

   db = cx_Oracle.connect('FORTEST', 'FORTEST', '12.12.12.212:1354/IOSSDB')
  mycurs = db.cursor()
  mycurs.execute("select DISTINCT BSC from I_HUAWEI_GERAN15.CELLSTATS_CFG")
  result = mycurs.fetchall()
  for (BSC) in result:
   print BSC

То я получаю ответ и все данные по запросу выводит в консоль. Или тут права не имеют значения?
FishHook
dmis18
Покажите settings.py
dmis18
 import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/
SECRET_KEY = '2)w+e6gildy-m0^!hs-c=#w-22k!5jx$(t7$!-wx$5rgwt5t4e'
DEBUG = True
ALLOWED_HOSTS = []
INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'rest_framework',
    'django_proj.app.comb_pan'
]
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'django_proj.urls'
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'django_proj/app/comb_pan/migrations/app/comb_pan/templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
WSGI_APPLICATION = 'django_proj.wsgi.application'
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.oracle',
        'NAME': 'IOSSDB',
        'USER': 'FORTEST',
        'PASSWORD': 'FORTEST',
        'HOST': '12.12.12.212',
        'PORT': '1354',
    },
    'standart': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
STATIC_URL = '/static/'
FishHook
dmis18
Тут вроде все правильно.
Итак makemigrations наверняка требует других привилегий, чем селект “select DISTINCT BSC from I_HUAWE….”. Как минимум, эта команда пишет в БД и делает хитрые запросы, чтобы получить текущую схему. Могу посоветовать залоггировать запросы и посмотреть на каком именно cx_Oracle падает.

логгер

как-то так
 LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'formatters': {
        'standard': {
            'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt': "%d/%b/%Y %H:%M:%S"
        },
    },
    'handlers': {
        'null': {
            'level': 'DEBUG',
            'class': 'logging.NullHandler',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        }
    }
}
    #Логгер для сбора запросов
LOGGING['loggers']['django.db'] = {
                'handlers': ['console'],
                'level': 'DEBUG',
            }
dmis18
Я конечно извиняюсь, но я не совсем понимаю способ применения логгера. И куда мне его вставить?
FishHook
dmis18
В settings.py

https://docs.djangoproject.com/en/1.11/topics/logging/
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB