django - Django rest框架身份验证数据库错误
问题描述
我正在尝试在我当前的项目中实现 django rest 框架。api 引擎在没有安全性的情况下工作。我正在尝试按照 django rest 框架的身份验证页面中给出的步骤添加身份验证。
当我将以下部分添加到 settings.py 时,我没有收到任何错误:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
]
}
但是当我将“rest_framework.authtoken”添加到 INSTALLED_APPS 并运行服务器时,
我收到以下消息:
您有 2 个未应用的迁移。在您为应用程序应用迁移之前,您的项目可能无法正常工作:authtoken。运行“python manage.py migrate”以应用它们。
然后我尝试运行:
python manage.py migrate
我收到以下错误:
(raiotic-venv) username@username-VirtualBox:~/Servers/Repositories/raiotic-venv/raiotic$ python manage.py migrate 要执行的操作:应用所有迁移:MainApp、admin、auth、authtoken、contenttypes、sessions 运行迁移:应用 authtoken.0001_initial...Traceback(最近一次调用最后):文件“/home/username/venv/lib/python3.6/site-packages/django/db/backends/utils.py”,第 82 行,在 _execute返回 self.cursor.execute(sql) 文件“/home/username/venv/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py”,第 381 行,在执行中返回 Database.Cursor .execute(self, query) sqlite3.OperationalError:尝试写入只读数据库
上述异常是以下异常的直接原因:
回溯(最后一次调用):文件“manage.py”,第 21 行,在 main() 文件“manage.py”,第 17 行,在 main execute_from_command_line(sys.argv) 文件“/home/username/venv/lib /python3.6/site-packages/django/core/management/init .py ”,第 381 行,在 execute_from_command_line utility.execute() 文件“/home/username/venv/lib/python3.6/site-packages/django /核心/管理/初始化.py”,第 375 行,在执行 self.fetch_command(subcommand).run_from_argv(self.argv) 文件“/home/username/venv/lib/python3.6/site-packages/django/core/management/base.py ",第 323 行,run_from_argv self.execute(*args, **cmd_options) 文件 "/home/username/venv/lib/python3.6/site-packages/django/core/management/base.py",第 364 行,在执行输出 = self.handle(*args, **options) 文件“/home/username/venv/lib/python3.6/site-packages/django/core/management/base.py”,第 83 行,在包装的 res = handle_func(*args, **kwargs) 文件“/home/username/venv/lib/python3.6/site-packages/django/core/management/commands/migrate.py”,第 234 行,在句柄 fake_initial =fake_initial,文件“/home/username/venv/lib/python3.6/site-packages/django/db/migrations/executor.py”,第 117 行,在 migrate state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) File "/home/username/venv/lib/python3.6/site-packages/django/db/migrations/ executor.py”,第 147 行,在 _migrate_all_forwards state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) 文件“/home/username/venv/lib/python3.6/site-packages/django/db /migrations/executor.py”,第 245 行,在 apply_migration 状态 = migration.apply(state, schema_editor) 文件“/home/username/venv/lib/python3.6/site-packages/django/db/migrations/migration. py”,第 124 行,在应用 operation.database_forwards(self.app_label,schema_editor,old_state,project_state)文件“/home/username/venv/lib/python3.6/site-packages/django/db/migrations/operations/models .py”,第 92 行,在 database_forwards schema_editor.create_model(model) 文件“/home/username/venv/lib/python3.6/site-packages/django/db/backends/base/schema.py”,第 307 行,在create_model self.execute(sql, params or None) File "/home/username/venv/lib/python3.6/site-packages/django/db/backends/base/schema.py",第 137 行,在执行光标中。执行(sql,params)文件“/home/username/venv/lib/python3.6/site-packages/django/db/backends/utils.py”,第 99 行,在执行 return super().execute(sql, params) 文件“/home/username/venv/lib/python3.6/site-packages/django/db/backends/utils.py”,第 67 行,执行 return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) 文件“/home/username/venv/lib/python3.6/site-packages/django/db/backends/utils.py”,第 76 行,在 _execute_with_wrappers 返回 executor(sql, params, many, context) 文件“/home/username/venvlib/python3.6/site-packages/ django/db/backends/utils.py”,第 84 行,在 _execute 中返回 self.cursor.execute(sql, params) 文件“/home/username/venvlib/python3.6/site-packages/django/db/utils. py",第 89 行,在exit raise dj_exc_value.with_traceback(traceback) from exc_value File "/home/username/venvlib/python3.6/site-packages/django/db/backends/utils.py",第 82 行,在 _execute return self.cursor.execute( sql) 文件“/home/username/venvlib/python3.6/site-packages/django/db/backends/sqlite3/base.py”,第 381 行,执行返回 Database.Cursor.execute(self, query) django。 db.utils.OperationalError:尝试写入只读数据库
解决方案
尝试更改对 db.sqlite3 文件的权限,这可能是该模式对于您正在运行的用户是只读的,因为您没有写入该文件的权限。
做
ls -al db.sqlite3
chmod a+w db.sqlite3
python manage.py migrate
推荐阅读
- python - 导入在包装函数内部不起作用
- python - 使用 scikit learn 中的决策树分类器时如何强调最重要的特征
- java - 数据加载后的 ExtJS 渲染
- javascript - 如何在 Nodejs 中使用 HTTP 请求发送文件附件
- json - 处理大文件时,Flutter 在 iPhone 上崩溃
- regex - 使用正则表达式通过命令行从二进制流中获取数据
- html - 不同页面上的定理记数
- c# - 为什么 AuthenticationMiddleware 会破坏中间件管道?
- java - Quarkus Apollo Server 联邦子图兼容性 (federation-jvm) 用于本机编译
- java - 你如何在java中将堆栈初始化为空?