Как правильно войти в систему пользователя через Django - PullRequest
1 голос
/ 19 марта 2019

Я пытаюсь войти в систему пользователя в Django. Если я использую код ниже, все работает нормально

def login(request):
    return render(request, 'web/login.html')

def home(request):
    if request.method == 'POST':
        if Member.objects.filter(username=request.POST['username'], password=request.POST['password']).exists():
            member = Member.objects.get(username=request.POST['username'], password=request.POST['password'])

            return render(request, 'web/home.html', {'member': member})
        else:
            context = {'msg': 'Invalid username or password'}
            return render(request, 'web/login.html', context)

Здесь я пытаюсь выполнить тот же вход в систему, обрабатывая данные с использованием clean_data , но выдает ошибку:

Представление webApp.views.home не возвращало объект HttpResponse. Вместо этого он вернул None.

Означает ли это, что данные моей формы пусты или не опубликованы?

У меня есть эталонное решение, найденное здесь , но безуспешно.

Вот код:

def login(request):
    return render(request, 'web/login.html')

def home(request):
    if request.method == 'POST':
        form = loginForm(request.POST)
        # check whether it's valid:

        if form.is_valid():
        # process the data in form.cleaned_data as required
            username =  form.cleaned_data['username']
            password =  form.cleaned_data['password']

            #if len(username) < 5 || len(password) < 5:

            if Member.objects.filter(username=username, password=password).exists():
                member = Member.objects.get(username=username, password=password)
                return render(request, 'web/home.html', {'member': member})
                print("success")
            else:
                context = {'msg': 'Invalid username or password'}
                return render(request, 'web/login.html', context)
                print('failed')

1 Ответ

0 голосов
/ 19 марта 2019

Основная идея ошибки заключается в том, что любое представление в Django должно возвращать HttpResponse или подобный объект. Здесь, по вашему мнению, вы не возвращаете HttpResponse все время. То есть выполнение программы не входит в условие if... вашего кода. и выполнение не может войти в предложение else.., если вы не определите их. Итак, я добавил несколько else условий.

Попробуйте это

def home(request):
    if request.method == 'POST':
        form = loginForm(request.POST)
        # check whether it's valid:

        if form.is_valid():
            # process the data in form.cleaned_data as required
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']

            # if len(username) &lt 5 || len(password) &lt 5:

            if Member.objects.filter(username=username, password=password).exists():
                member = Member.objects.get(username=username, password=password)
                return render(request, 'web/home.html', {'member': member})
                print("success")
            else:
                context = {'msg': 'Invalid username or password'}
                return render(request, 'web/login.html', context)
                print('failed')
        <b>else:
            context = {'msg': 'Form is not valid'}
            return render(request, 'web/login.html', context)
    else:
        context = {'msg': 'HTTP method is not "POST"'}
        return render(request, 'web/login.html', context)</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...