Я сталкиваюсь с ошибкой при использовании декоратора @login_required, он показывает TemplateDoesNotExist в / account / login / - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь использовать декоратор входа в свой проект, но когда я использую его, он показывает мне ошибку

TemplateDoesNotExist at /accounts/login/

registration/login.html

urls.py

path('', login.login_view , name='login'),
path('fileupload/', FileUpload.fileup, name='fileupload'),

view.py-> FileUpload.py-> fileup

@login_required(login_url='login')
def fileup(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)

        if form.is_valid():
            form = form.save(commit=False)
            form.user = request.user
            form.save()
            print(form.image)
            print(form.user_id)
            send_message(str(form.image), form.user_id)

            text_filename = 'media/' + str(form.image).rstrip('.jpg') + '.txt'
            form.text_file = text_filename
            print(str(form.text_file))
            form.save()
            with open(text_filename, 'r+') as file:
                new_text = file.read()

            return render(request, "pd/NewText.html", {
                'form': form,
                'new_text': new_text,
            })
    else:
        form = DocumentForm()
    return render(request, 'pd/FileUpload.html', {'form': form})

Я хочу, если пользователь не вошел в систему и попытался получить доступ к URL fileupload\, тогда он не будет разрешен, пока он / она не вошел в систему.

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Django пытается перенаправить на маршрут входа по умолчанию, который /accounts/login, см. Документацию .И представлению позади этого маршрута нужен шаблон.

В этом случае лучший подход IMO - это изменить настройки так, чтобы они указывали на ваш URL для входа в систему.

# settings.py
LOGIN_URL = "/"
0 голосов
/ 29 мая 2019

Это то, что вы хотите.

# Create your views here.
def post_create(request):
    if not request.user.is_staff or not request.user.is_superuser:
        raise Http404
    form = PostForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        messages.success(request, "Succefully Created")
        return HttpResponseRedirect(instance.get_absolute_url())

    context = {
        "form": form,
    }
    return render(request, "post_form.html", context)

Вот официальный документ, чтобы вы могли изучить ваши варианты

Вам не нужен декоратор, просто поместите в своем представлении оператор if, чтобы проверить, является ли пользователь участником или что-то еще, если это не так, вызовите ошибку.

Также здесь есть учебник Mozila Django по созданию функций входа в систему

Также убедитесь, что ваши шаблоны находятся на правильном пути.

...