Django.db.utils.OperationalError: нет такой таблицы: django_session
Причина: Я начинающий[Plz будьте добры и терпеливы]. Когда я пытаюсь запустить команды в терминале, например:
python manage.py makemigrations audioma_manager
или
python manage.py runserver
или
python manage.py migrate
или
python manage.py --run-syncdb
где audioma_manager - имя моего проекта
Я пробовал также с именем моего приложения
Я получаю этот код исключения, я искал много в сети, но любое решение работает с моей проблемой:
Вот мой файл настроек (я использую django-environ для сохранения некоторых переменных):
Мой клиент:
from audioma_manager.settings import API_ENDPOINT_LOGIN, API_PASSWORD, API_URL, API_USERNAME, API_VERSION
from django.contrib.sessions.backends.db import SessionStore
import requests
from requests.structures import CaseInsensitiveDict
#class API management
class GetAPISources:
#authentication to aziendal api
def auth_api(self):
url = API_URL + API_VERSION + API_ENDPOINT_LOGIN
auth_email = API_USERNAME
auth_password = API_PASSWORD
list_of_auth = [auth_email,auth_password]
response= requests.post(url,list_of_auth)
if response.status_code==400:
#manage exception code; return null
return False
token=response['token']
#instance of SessionStore
s=SessionStore()
s['auth_token']=token
# saves the current token
s.save()
#implement a method who calls API endpoint from InfojuiceAPi with representation=1
def call_api(self,endpoint):
api_repr='&representation=1'
s=SessionStore()
session_stored = s.load()
auth_token=session_stored['auth_token']
#used endpoint so i can customize the type of endpoint everytime i call the function
#example--> endpoint='/sources' ; endpoint='/customers'
url = API_URL + API_VERSION + endpoint + api_repr
headers = CaseInsensitiveDict()
headers["Accept"]="application/json"
headers["Authorization"]="token " + auth_token
response= requests.get(url,headers=headers)
if response.status_code==401:
self.auth_api()
self.call_api(endpoint)
return response
Моя модель:
from django.db import models
# Create your models here.
class Transcription(models.Model):
id = models.BigAutoField
file_name = models.CharField(max_length=10000)
created_at = models.DateTimeField(auto_now_add=True, name='created_at')
updated_at = models.DateTimeField(auto_now=True, name='updated_at')
def __str__(self):
return self.file_name
Моя форма:
from django import forms
from .client_transcpition_api import GetAPISources
source_choice=GetAPISources.call_api(GetAPISources,endpoint='sources')
class UploadForm(forms.Form):
lang = forms.CharField(label='Lingua', max_length=100, help_text = "Inserisci la lingua del contenuto")
source = forms.CharField(label='Fonte', help_text = "Seleziona la fonte del contenuto" , widget=forms.Select(choices=source_choice))
data = forms.DateField(label='data', help_text = "Seleziona la data del contenuto ", max_length=100)
time = forms.TimeField(label='ora', help_text = "Seleziona l' orario del contenuto", max_length=100)
extension = forms.CharField(label='estensione', help_text = "Seleziona l'estensione del contenuto", max_length=100)
file = forms.FileField(label='file da caricare', help_text = "Seleziona il file da mandare in trascrizione")
Мои взгляды:
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import UploadForm
def upload(request):
# if this is a POST request we need to process the form data
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = UploadForm(request.POST)
# check whether it's valid:
if form.is_valid():
# process the data in form.cleaned_data as required
# redirect to a new URL:
#this url is only temp, evaluate better how to do
return HttpResponseRedirect('/thanks/')
else:
form = upload()
return render(request, 'upload.html', {'form': form})
Мой шаблон:
<!DOCTYPE html>
{% Block Content %}
<h2>Upload</h2>
<form enctype="multipart/form-data" method="post" action="/foo/">
<!-- we need to use this token bc Django makes security controls and requires this token
to be recognize as trust source of code -->
{% csrf_token %}
{{form}}
<input type="file" name="recupero">
<button type="submit">Invio</button>
</form>
В своем проекте я хочу:
1)Создайте репозитории, новый проект Django и первый коммит.
2)Установите Django Environ для загрузки конфигураций через .env файлы. Конфигурация должна позволять вам настраивать: аутентификацию к Aziendal API (URL, версия, имя пользователя, пароль) каталог пути для сохранения нового файла для расшифровки шаблон имени файла (с заполнителем для замены различных компонентов, таких как дата, название источника, название, язык, время)
3)Создайте модель Transcription для сохранения информации о содержимом, передаваемом при транскрипции. Схема: ID имя_файла (Строка) created_at (Datetime) updated_at (Datetime)
4) Реализуйте мини-клиент к Aziendal API для THE GET получения источников, отфильтрованных по имени и с параметром запроса для получения раппорта. Используйте аутентификацию, настроенную в конфигурационном файле.
5) Реализуйте страницу с формой для загрузки нового транскрипта со следующими полями: дата (дата) источник (выбрать источники, взятые из API) язык (выбирается из конфигурации) название возможный профиль (необязательно)
Помогите молодому начинающему. Если вам нужен исходный код моего проекта, просто спросите:) Спасибо за помощь xoxo
Наиболее актуальной проблемой здесь является то, что вы выполняете вызов базы данных во время импорта, пытаясь загрузить сессию через
File "C:\Users\39371\audioma_manager\transcription_form\forms.py", line 5, in <module>
source_choice=GetAPISources.call_api(GetAPISources,endpoint='sources')
File "C:\Users\39371\audioma_manager\transcription_form\client_transcpition_api.py", line 48, in call_api
session_stored = s.load()
File "C:\Users\39371\AudioManVenv\lib\site-packages\django\contrib\sessions\backends\db.py", line 43, in load
s = self._get_session_from_db()
что является большим запретом в Django и приводит к проблеме курицы и яйца:
- вам нужно сделать миграции и запустить миграции для создания таблиц базы данных
- Django должен иметь возможность импортировать ваше приложение, чтобы сделать это
- ваше приложение пытается выполнить запрос к базе данных из пока еще несуществующей таблицы (поскольку она еще не была мигрирована).
Вам нужно будет сделать это source_choice
, например, __init__
во время работы с формой, а не во время импорта.
На данный момент вы можете заменить строку source_choice=...
на source_choice=[]
- у вас не будет источников для выбора, но вы сможете запустить миграции.
Вместе с тем, код, связанный с сессией, выглядит странно, особенно поскольку вы пытаетесь сделать это вне контекста запроса. В этом случае не будет корректной сессии для загрузки, так как не будет и запроса. Я думаю, вы путаете сессии Django с тем, что требует используемый вами API.