62542


djangoを使ってアプリ開発をしている学生です。views.pyのコードを書いている中で、どうしても解決できないエラーが発生したので、是非プロフェッショナルの皆様の力を貸していただきたいです。まだプログラミング経験は浅く、専門用語等分からないところもありますが、よろしくお願いいたします。

以下のコードを作成し実行した結果、エラーが発生してしまいました。  
どのように解決すればよいでしょうか？

**views.pyのコード**

[code]

    # coding:utf-8
    from django.shortcuts import render
    from django.contrib.auth.models import User
    from django.contrib.auth import authenticate, login
    from django.shortcuts import redirect
    
    # Create your views here.
    
    def signupfunc(request):
        if request.method == 'POST':
            username2 = request.POST['username']
            password2 = request.POST['password']
            try:
                User.objects.get(username=username2)
                return render(request, 'signup.html', {'error':'このユーザーは登録されています'})
            except:
                user = User.objects.create_user(username2, '', password2)
                return render(request, 'signup.html', {'some':100})
        return render(request, 'signup.html', {'some':100})
    
    def loginfunc(request):
        if request.method == 'POST':
            username2 = request.POST['username']
            password2 = request.POST['password']
            user = authenticate(request, username=username2, password=password2)
            if user is not None:
                login(request, user)
                return redirect('signup')   
            else:
                return redirect('signup')
        return render(request, 'login.html')
    
[/code]

**エラーメッセージ**

[code]

    ValueError at /login/
    The view platformapp.views.loginfunc didn't return an HttpResponse object. It returned None instead.
    Request Method:
    GET
    Request URL:
    http://localhost:8000/login/
    Django Version:
    1.11.27
    Exception Type:
    ValueError
    Exception Value:
    The view platformapp.views.loginfunc didn't return an HttpResponse object. It returned None instead.
    Exception Location:
    /home/yuki/.local/lib/python2.7/site-packages/django/core/handlers/base.py in _get_response, line 198
    Python Executable:
    /usr/bin/python
    Python Version:
    2.7.17
    Python Path:
    ['/mnt/c/Users/yuuki/platform/platformproject',
     '/usr/lib/python2.7',
     '/usr/lib/python2.7/plat-x86_64-linux-gnu',
     '/usr/lib/python2.7/lib-tk',
     '/usr/lib/python2.7/lib-old',
     '/usr/lib/python2.7/lib-dynload',
     '/home/yuki/.local/lib/python2.7/site-packages',
     '/usr/local/lib/python2.7/dist-packages',
     '/usr/lib/python2.7/dist-packages']
    Server time:
    Sat, 25 Jan 2020 07:18:31 +0000
    
[/code]


CC BY-SA 4.0
2020-01-25T11:01:59.310
62539
2020-01-25T16:21:39.947
2020-01-25T16:21:39.947
19110
36669
question
python django
ValueError: The view platformapp.views.loginfunc didn't return an HttpResponse object. It returned None instead


発生しているエラー `The view platformapp.views.loginfunc didn't return an HttpResponse
object. It returned None instead.` は、 `loginfunc` 関数がNoneを返した、と言っています。

しかし、ソースコードを見た限りでは、 `render` と `redirect`
はHttpResponse（かその継承クラス）を返すため、Noneが返されるケースはなさそうに見えます。

このため、以下の可能性が考えられます。

  1. 別の.pyファイルの loginfunc が使われている -> 確認してみてください
  2. コード修正後にDjangoを再起動していない -> 再起動してみてください
  3. `views.py` ディレクトリにある `__pycache__` ディレクトリを削除してDjangoを再起動したら直る


CC BY-SA 4.0
2020-01-25T12:21:24.890
62542
2020-01-25T12:21:24.890
806
62539
answer