Как мне объявить новое приложение в структуре отдыха Django? Кажется, все в порядке, но у меня есть RuntimeError - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу объявить новое приложение в Python, используя Django rest Framework.

Сначала я сделал следующие шаги:

cmd>django-admin startproject djrest .
cmd>cd djrest
cmd>django-admin startapp sarox
cmd>cd..

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'sarox',
        'USER': 'root',
        'PASSWORD': '*******',
        'HOST': 'localhost',
        'PORT': '****',
    }
}

cmd>python manage.py migrate
cmd>python manage.py createsuperuser
cmd>py manage.py runserver 0.0.0.0:2281

, затем я объявил модель в Sarox_models.py в saroxdirectory:

from django.db import models
class SaroxUsers(models.Model):
    user_id = models.AutoField(db_column='User_id', primary_key=True)  # Field name made lowercase.
    salt = models.CharField(db_column='Salt', max_length=200, blank=True, null=True)  # Field name made lowercase.
    hash = models.CharField(db_column='Hash', max_length=200, blank=True, null=True)  # Field name made lowercase.
    username = models.CharField(db_column='Username', unique=True, max_length=15)  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'sarox_users'

Затем я добавил следующую строку в views.py в sarox directory:

from djrest.sarox.Sarox_models import SaroxUsers

, а затем создал строку в классе конфигурации INSTALLED_APPS в settings.py file.

Вот мой INSTALLED_APPS класс конфигурации:

INSTALLED_APPS = [
    'sarox.apps.SaroxConfig',
    ...
]

Мое новое приложение объявлено так в sarox/apps.py

from django.apps import AppConfig
class SaroxConfig(AppConfig):
    name = 'sarox'

Но когда я запускаюКоманда python manage.py runserver 0.0.0.0:2281 вызывает ошибку во время выполнения:

E:\MyApps\Plot\djrest>python manage.py runserver 0.0.0.0:2281
Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "C:\Users\AMoha\AppData\Local\Programs\Python\Python37\lib\threading.py", line 926, in _bootstrap_inner
    self.run()
  File "C:\Users\AMoha\AppData\Local\Programs\Python\Python37\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\AMoha\AppData\Local\Programs\Python\Python37\lib\site-packages\django\utils\autoreload.py", line 54, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\AMoha\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\management\commands\runserver.py", line 109, in inner_run
    autoreload.raise_last_exception()
  File "C:\Users\AMoha\AppData\Local\Programs\Python\Python37\lib\site-packages\django\utils\autoreload.py", line 77, in raise_last_exception
    raise _exception[1]
  File "C:\Users\AMoha\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\management\__init__.py", line 337, in execute
    autoreload.check_errors(django.setup)()
  File "C:\Users\AMoha\AppData\Local\Programs\Python\Python37\lib\site-packages\django\utils\autoreload.py", line 54, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\AMoha\AppData\Local\Programs\Python\Python37\lib\site-packages\django\__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\Users\AMoha\AppData\Local\Programs\Python\Python37\lib\site-packages\django\apps\registry.py", line 91, in populate
    app_config = AppConfig.create(entry)
  File "C:\Users\AMoha\AppData\Local\Programs\Python\Python37\lib\site-packages\django\apps\config.py", line 116, in create
    mod = import_module(mod_path)
  File "C:\Users\AMoha\AppData\Local\Programs\Python\Python37\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'sarox'
...

И когда я удалил, новая строка содержит 'sarox.apps.SaroxConfig', в конфигурации INSTALLED_APPS класса settings.py все стало нормально.

Структура каталогов моего проекта находится здесь:

direcory

У вас есть идеи?

Ответы [ 3 ]

1 голос
/ 06 ноября 2019

djrest - это не ваш корневой каталог, это каталог 'project' (каталог, в котором Django ищет настройки, корневые URL-адреса и т. Д.), Поэтому текущий путь python к вашему пакету "sarox" не sarox, а djrest.sarox.

При этом ваши приложения не должны находиться в этом каталоге, они должны находиться непосредственно в корневом каталоге на том же уровне, что и djrest и manage.py, поэтому правильное решение здесь - оставить свойsettings.INSTALLED_APPS в одиночку и переместите весь каталог sarox на один уровень вверх.

Кроме того, Django ожидает, что ваш модуль моделей будет называться «models.py», а не «Sarox_models.py», поэтому вам придется это исправитьтоже (переименуйте модуль и исправьте все ваши импорта), чтобы ваше приложение работало.

Как уже упоминалось, использование команды управления Django startapp создало бы правильную структуру каталога приложения в нужном месте, спасая васвсе эти неприятности.

1 голос
/ 05 ноября 2019

Разве вы не использовали команду Джанго startapp? Я действительно думаю, что вы должны проверить, есть ли файл __init__.py в папке sarox.

0 голосов
/ 05 ноября 2019

Вы можете запустить новое приложение в django, используя команду python manage.py startapp имя вашего приложения. После этого вы можете определить ваши представления и сериализаторы с помощью drf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...