Локальный сервер Django: Атомная база данных из текстового файла - PullRequest
0 голосов
/ 17 мая 2019

Я создал веб-приложение, которое принимает текстовый файл, читает каждую строку, принимает 11-й символ и сохраняет его в SQLite3 db. Как заблокировать базу данных или иметь две или более отдельных таблиц во время выполнения нескольких запросов?

Я добавил добавление ATOMIC_REQUESTS ': True для settings.py в Django. и я попытался создать временные таблицы для каждого запроса, но не могу понять это. Я довольно свежий для Django 2.2

My View.py

def home(request):

    if request.method == 'GET': 
        return render(request, 'home.html')
    if request.method == 'POST':

        form = DocumentForm(data=request.POST, files=request.FILES)
        print(form.errors)
        if form.is_valid():
            try:
                f = request.FILES['fileToUpload']
            except:
                print('\033[0;93m'+ "No File uploaded, Redirecting" +'\033[0m')
                return HttpResponseRedirect('/tryagain')
            print('\033[32m'+ "Success" +'\033[0m')
            print('Working...')
            line = f.readline()
            while line:
                #print(line)
                mst = message_typer.messages.create_message(str(line)[11])
                line = f.readline()
        else:
            print('\033[0;91m'+ "Failed to validate Form" +'\033[0m')


        return HttpResponseRedirect('/output')
    return HttpResponse('Failure')




def output(request):
    s = message_typer.messages.filter(message='s').count()
    A = message_typer.messages.filter(message='A').count()
    d = message_typer.messages.filter(message='d').count()
    E = message_typer.messages.filter(message='E').count()
    X = message_typer.messages.filter(message='X').count()
    P = message_typer.messages.filter(message='P').count()
    r = message_typer.messages.filter(message='r').count()
    B = message_typer.messages.filter(message='B').count()
    H = message_typer.messages.filter(message='H').count()
    I = message_typer.messages.filter(message='I').count()
    J = message_typer.messages.filter(message='J').count()
    R = message_typer.messages.filter(message='R').count()

    message_types = {'s':s, 'A':A, 'd':d, 'E':E, 'X':X, 'P':P,\
                     'r':r, 'B':B, 'H':H, 'I':I, 'J':J, 'R':R }
    output = {'output':message_types}
    #return HttpResponse('Received')
    message_typer.messages.all().delete()
    return render(request, 'output.html',output)

Когда веб-страница загружается, на ней должна отображаться простая разбивка каждого символа в 11-й позиции загруженного текстового файла.

Однако, если два запроса выполняются одновременно, первая страница, которая делает запрос, получает ошибку операции; БД заблокирован. Трассировка сюда: message_typer.messages.all().delete()

Вторая страница будет суммой двух загруженных файлов.

Я хочу стереть таблицу после, чтобы у следующего пользователя была пустая таблица для заполнения и подсчета.

Есть ли лучший способ?

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