Как вызвать URL в функции просмотра Django - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь выполнить один из URL-адресов urls.py с помощью urllib в функции просмотра django. После выполнения я получил ошибку вроде

raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 411: Length Required

Возможно ли выполнить URL с urllib внутри функции просмотра django.

@login_required(login_url='http://domain/user/login?destination=apps/member/change_password')
def change_password(request):
    '''Form for user to change their password'''
    form = SetPasswordForm(user=request.user, data=request.POST or None)
    if form.is_valid():
        form.save()
        ob = urllib.request.urlopen(url='http://domain/login/', data=request)
        messages.success(request, 'Your password has been succesfully updated!')
        return redirect('hq:profile')

    return render(request, 'registration/password_change_form.html',
        {'form': form})

при выполнении urllib

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Я решил мою проблему, изменив, как показано ниже.

from django.contrib.auth import login

@login_required(login_url='http://domain/user/login?destination=apps/member/change_password')
def change_password(request):
    '''Form for user to change their password'''
    form = SetPasswordForm(user=request.user, data=request.POST or None)
    if form.is_valid():
        user = form.save()
        user.is_active = True
        user.save()
        user.backend = "django.contrib.auth.backends.ModelBackend"

        login(request, user)
        messages.success(request, 'Your password has been succesfully updated!')
        return redirect('hq:profile')

    return render(request, 'registration/password_change_form.html',
        {'form': form})
0 голосов
/ 17 октября 2019

Да, это возможно, но имейте в виду, что время этого запроса будет складываться с вашим временем загрузки.

Если вы сделаете это из той же системы django, вам следует подумать, будет лилучшее решение.

В вашем случае оно может в конечном итоге использовать:

from django.contrib.auth import authenticate

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