我制作了一个Web应用程序,该应用程序接收一个文本文件,读取每一行,接受第11个字符并将其保存到SQLite3 db。在多个请求运行时,如何锁定数据库或拥有两个或多个单独的表?
我在Django的settings.py中添加了添加ATOMIC_REQUESTS':True。 并且我尝试为每个请求创建临时表,但无法弄清楚。我对Django 2.2非常了解
我的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个位置显示每个字符的简单细分。
但是,如果两个请求同时运行,则发出请求的第一页将出现操作错误; Db已锁定。
追溯到这里:
message_typer.messages.all().delete()
第二页将汇总上载的两个文件的总数。
我确实想在此后擦除表格,以便下一个用户将有一个空表格来填充并执行计数。
有更好的方法吗?