如何在Django rest框架中声明新应用?似乎一切正常,但我遇到了RuntimeError

我想使用Django rest框架在python中声明新应用。

首先,我执行以下步骤:

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目录下的sarox中声明了一个模型:

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',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

from djrest.sarox.Sarox_models import SaroxUsers

,然后在INSTALLED_APPS文件的settings.py配置类中创建一行。

这是我的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",**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 965,in _find_and_load_unlocked
ModuleNotFoundError: No module named 'sarox'
...

当我删除新行时,在'sarox.apps.SaroxConfig',的{​​{1}}类配置中包含INSTALLED_APPS,一切正常。

我的项目目录结构在这里:

如何在Django rest框架中声明新应用?似乎一切正常,但我遇到了RuntimeError

你有什么主意吗?

bonaxi 回答:如何在Django rest框架中声明新应用?似乎一切正常,但我遇到了RuntimeError

您不是使用Django的startapp命令吗?我确实认为您应该检查__init__.py文件夹下是否有sarox文件。

,

djrest不是您的根目录,它是“项目”目录(Django在其中查找设置,根URL的目录),因此,您的“ sarox”软件包的当前python路径不是{{1 }},但sarox

这就是说,您的应用程序不应位于此目录中,而应直接位于与djrest.saroxdjrest相同级别的根目录中,因此此处的正确解决方案是保留您一个人manage.py,然后将整个sarox目录上移一层。

此外,Django希望您的模型模块被命名为“ models.py”,而不是“ Sarox_models.py”,因此您也必须对其进行修复(重命名模块并修复所有导入),以使应用程序正常工作。

正如其他人已经提到的那样,使用Django的settings.INSTALLED_APPS管理命令可以在正确的位置创建正确的应用程序目录结构,从而省去了所有麻烦。

,

您可以使用命令python manage.py startapp在django中启动新应用程序,您的应用程序名称。之后,您可以使用drf定义视图和序列化器。

本文链接:https://www.f2er.com/3161194.html

大家都在问