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.

Вернуться на верх