Как загрузить файл и перенаправить его на другую страницу в django?
После входа в систему у меня появилась страница upload.html. Когда я нажимаю кнопку загрузить файл, я хочу показать страницу upload или другие страницы. Он снова перенаправляет на страницу входа в систему. Могу ли я узнать, в чем ошибка в моем коде?
Вот View.py
вход строго обязателен. Как только пользователь входит в систему, у меня появляется страница upload.html. У меня есть две группы: (Новый пользователь) и администрация.
@login_required(login_url='/registration/login/')
def login_request(request):
if request.method == 'POST':
form = AuthenticationForm(request=request, data=request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
messages.info(request, f"You are now logged in as {username}")
return render(request, "upload.html")
form = AuthenticationForm()
return render(request = request,
template_name = "registration/login.html",
context={"form":form})
@unauthenticated_user
def login(request):
"""
Creates login view
Returns: rendered login page
"""
return render(request, 'registration/login.html')
@allowed_users(allowed_roles=["administrator", "New user"])
def upload(request):
if request.method == 'POST':
if request.FILES.get('document'):
file = request.FILES['document']
workbook = load_workbook(filename=file, data_only=True)
xls = workbook[workbook.sheetnames[0]]
result = []
# macros check
vba_parser = VBA_Parser(file)
vba_modules = vba_parser.extract_all_macros()
if vba_parser.detect_vba_macros():
result.append("Caution, macros has been found in your excel file.")
count = 0
# check .exe, url
for i in range(1, xls.max_row+1):
count = 0
for cell in xls[i]:
for column_value in cell.value.split(','):
count = count + 1
if re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', str(column_value)):
message = str('found a url link in row ', i ,' and column ', count)
result.append(message)
elif re.findall(r'\b\S*\.exe\b', str(column_value)):
message = str( 'found .exe file in row ', i ,' and column ', count)
result.append(message)
elif count == len(xls[i]):
count = 0
dic_result = { 'report': result}
return render(request, 'upload.html', dic_result)
return render(request, 'upload.html')
Вот url.py
from django.contrib import admin
from django.urls import path
from django.contrib.auth.views import LoginView
from excel import views
urlpatterns = [
path('admin/', admin.site.urls),
path('registration/login/', LoginView.as_view(), name='login'),
path('registration/register/', views.register, name='register'),
path('', views.login_request, name='home'),
path('upload', views.upload, name='upload'),
path('logout', views.logout_request, name='logout'),
]