質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

3回答

7772閲覧

ValueError didn't return an HttpResponse object. It returned None instead.のエラー解決ができません!

morizo029

総合スコア12

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/02/10 18:44

djangoの入門書からSNSアプリを作っておりますが、このエラーから抜け出せなくなっております。
他のサイトに調べながらやりましたが、全く見当がつかないのでこちらで質問させて頂きます。

views.py

1from django.shortcuts import render 2from django.shortcuts import redirect 3from django.contrib.auth.models import User 4from django.contrib import messages 5 6from .models import Message,Friend,Group,Good 7from .forms import GroupCheckForm,GroupSelectForm,SearchForm,FriendsForm,CreateGroupForm,PostForm 8 9from django.db.models import Q 10from django.contrib.auth.decorators import login_required 11 12@login_required(login_url='/admin/login/') 13def index(request): 14 (public_user, public_group) = get_public() 15 16 if request.method == 'POST': 17 18 if request.POST['mode'] == '__check_form__': 19 serchform = SearchForm() 20 checkform = GroupCheckForm(request.user,request.POST) 21 glist = [] 22 for item in request.POST.getlist('groups'): 23 glist.append(item) 24 25 messages = get_your_group_message(request.user, glist, None) 26 27 if request.Post['mode'] == '__serch_form__': 28 serchform = serchform(request.POST) 29 checkform = GroupCheckForm(request.user) 30 gps = Group.objects.filter(owner=request.user) 31 glist = [public_group] 32 for item in gps: 33 glist.append(item) 34 messages = get_your_group_message(request.user, glist, request.POST['search']) 35 else: 36 serchform = SearchForm() 37 checkform =GroupCheckForm(request.user) 38 gps = Group.objects.filter(owner=request.user) 39 glist = [public_group] 40 for item in gps: 41 glist.append(item) 42 messages = get_your_group_message(request.user, glist, None) 43 params = { 44 'login_user':request.user, 45 'contents':messages, 46 'check_form':checkform, 47 'serch_form':serchform, 48 } 49 return render(request, 'sns/index.html', params) 50 51 52@login_required(login_url='/admin/login') 53def groups(request): 54 friends = Friend.objects.filter(owner=request.user) 55 56 if request.method == 'POST': 57 58 if request.POST['mode'] == '__groups_form__': 59 sel_group = request.POST['groups'] 60 gp = Group.objects.filter(owner=request.user).filter(title=sel_group).first() 61 fds = Friend.objects.filter(owner=request.user).filter(group=gp) 62 vlist=[] 63 for item in fds: 64 vlist.append(item.user.username) 65 groupsform = GroupSelectForm(request.user, request.POST) 66 friendsform = FriendsForm(request.user, friends=friends, vals=vlist) 67 68 if request.POST['mode'] == 'friends_form__': 69 sel_group = request.POST['group'] 70 group_obj = Group.objects.filter(title=sel_group).first() 71 sel_fds = request.POST.getlist('friends') 72 sel_users = User.objects.filter(username__in=sel_fds) 73 fds = Friend.objects.filter(owner=request.user).filter(user__in=sel_users) 74 vlist = [] 75 for item in fds: 76 item.group = group_obj 77 item.save() 78 vlist.append(item.user.username) 79 messages.success(request, ' チェックしたFriendを' + sel_group + 'に登録しました。') 80 81 groupsform = GroupSelectForm(request.user, {'groups':sel_group}) 82 friendsform = FriendsForm(request.user, friends=friends, vals=vlist) 83 84 else: 85 groupsform = GroupSelectForm(request.user) 86 friendsform = FriendsForm(request.user, friends = friends, vals=[]) 87 sel_group = '-' 88 89 createform = CreateGroupForm() 90 params = { 91 'login_user':request.user, 92 'groups_form':groupsform, 93 'friends_form':friendsform, 94 'create_form':createform, 95 'group':sel_group, 96 } 97 return render(request, 'sns/groups.html', params) 98 99 100@login_required(login_url='/adnun/login/') 101def add(request): 102 add_name = request.Get['name'] 103 add_user = User.objects.filter(username=add_name).first() 104 105 if add_user == request.user: 106 messages.info(request, "自分自身をフレンドに追加することはできません。") 107 return redirect(to='/sns') 108 109 (public_user, public_group) = get_public() 110 111 frd_num = Friend.objects.filter(owner=request.user).filter(user=add_user).count() 112 113 if frd_num > 0: 114 messages.info(request, add_user.usernane + ' は既に追加されています。') 115 return redirect(to='/sns') 116 117 frd = Friend() 118 frd.owner = add_user 119 frd.user = add_user 120 frd.group = public_group 121 frd.save() 122 123 messages.success(request, add_user.username + ' を追加しました!groupページに移動して、追加したFriendをメンバーに設定して下さい。') 124 return redirect(to='/sns') 125 126@login_required(login_url='/admin/login/') 127def creategroup(request): 128 gp = Group() 129 gp.owner = request.user 130 gp.title = request.POST['group_name'] 131 gp.save() 132 messages.info(request, '新しいグループを作成しました。') 133 return redirect(to='/sns/groups') 134 135@login_required(login_url='/admin/login/') 136def post(request): 137 if request.method == 'POST': 138 gr_name = request.POST['groups'] 139 content = request.POST['content'] 140 group = Group.objects.filter(owner=request.user).filter(title=gr_name).first() 141 142 if group == None: 143 (pub_user, group) = get_public() 144 msg = Message() 145 msg.owner = request.user 146 msg.group = group 147 msg.content = content 148 msg.save() 149 messages.success(request,'新しいメッセージを投稿しました!') 150 return redirect(to='/sns') 151 else: 152 form = PostForm(request.user) 153 params = { 154 'login_user':request.user, 155 'form':form, 156 } 157 return render(request, 'sns/post.html', params) 158 159@login_required(login_url='/admin/login/') 160def share(request, share_id): 161 share = Message.objects.get(id=share_id) 162 163 if request.method == 'POST': 164 gr_name = request.POST['groups'] 165 content = request.POST['content'] 166 group = Group.objects.filter(owner=request.user).filter(title=gr_name).first() 167 168 if group == None: 169 msg = Message() 170 msg.owner = request.user 171 msg.group = group 172 msg.content = content 173 msg.share_id = share.id 174 msg.save() 175 share_msg = msg.get_share() 176 share_msg.share_count += 1 177 share_msg.save() 178 messages.success(request, 'メッセージをシェアしました!') 179 return redirect(to='/sns') 180 181 form = PostForm(request.user) 182 params = { 183 'login_user':request.user, 184 'form':form, 185 'share':share, 186 } 187 return render(request, 'sns/share.html', params) 188 189@login_required(login_url='/admin/login/') 190def good(request, good_id): 191 good_msg = Message.objects.get(id=good_id) 192 is_good = Good.objects.filter(owner=request.user).filter(message=good_msg).count() 193 194 if is_good > 0: 195 messages.success(request, '既にメッセージにはGoodしています') 196 return redirect(to='/sns') 197 198 good_msg.good_count += 1 199 good_msg.save() 200 good = Good() 201 good.owner = request.user 202 good.message = good_msg 203 good.save() 204 messages.success(request, 'メッセージにGoodしました!') 205 return redirect(to='/sns') 206 207 208def get_your_group_message(owner, glist, find): 209 (public_user,public_group) = get_public() 210 group = Group.objects.filter(Q(owner=owner)|Q(owner=public_user)).filter(title__in=glist) 211 me_friends = Friend.objects.filter(group__in=groups) 212 me_users = [] 213 for f in me_friends: 214 me_users.append(f.user) 215 his_groups = Group.objects.filter(owner__in=me_users) 216 his_friends = Friend.objects.filter(user=owner).filter(group__in=his_groups) 217 me_groups = [] 218 for hf in his_friends: 219 me_groups.append(hf.group) 220 if find == None: 221 messages = Message.objects.filter(Q(group__in=groups)|Q(group__un=me_groups))[:100] 222 else: 223 messages = Message.objects.filter(Q(group__in=groups)|Q(group__un=me_groups)).filter(content__contains=find)[:100] 224 return messages 225 226def get_public(): 227 public_user = User.objects.filter(username='public').first() 228 public_group = Group.objects.filter(owner=public_user).first() 229 return (public_user, public_group)

初心者ながらコードの掲載する際に不備などあると思いますがよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2019/02/10 19:30 編集

エラーも省略せずtraceback含めて全文掲載してください
morizo029

2019/02/11 05:42

Environment: Request Method: GET Request URL: http://127.0.0.1:8000/sns/ Django Version: 2.1.5 Python Version: 3.7.2 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'sns'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] Traceback: File "C:\Users\t0301\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\exception.py" in inner 34. response = get_response(request) File "C:\Users\t0301\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\base.py" in _get_response 137. "returned None instead." % (callback.__module__, view_name) Exception Type: ValueError at /sns/ Exception Value: The view sns.views.index didn't return an HttpResponse object. It returned None instead. すいませんtrackback載せます。 再度申し訳ございませんがご教授お願い致します。
guest

回答3

0

エラーコードの詳細がないのですが、エラーメッセージを見る限り、viewの中でHttpレスポンスオブジェクトを返していないことが原因かと思います。

djangoは、必ずHttpリクエストを受け取り、Httpレスポンスを返さなければいけません。

一番簡単なのは、function based viewで
return HttpResponse('')
とする方法です。

投稿2019/02/10 23:48

ryotax

総合スコア142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

morizo029

2019/02/11 05:52

先ほど掲載したviews.py の中に ・from django.http import HttpResponse ・def my_view(request): return HttpResponse('') を追加しましたがエラーは先ほどと変わらずです。。。 エラー詳細掲載忘れ申し訳ありませんでした。 Environment: Request Method: GET Request URL: http://127.0.0.1:8000/sns/ Django Version: 2.1.5 Python Version: 3.7.2 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'sns'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] Traceback: File "C:\Users\t0301\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\exception.py" in inner 34. response = get_response(request) File "C:\Users\t0301\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\base.py" in _get_response 137. "returned None instead." % (callback.__module__, view_name) Exception Type: ValueError at /sns/ Exception Value: The view sns.views.index didn't return an HttpResponse object. It returned None instead. 再度お手数ですがご教授お願い致します。
guest

0

tell_kさんのとおり、エラーコードはsns.views.index、つまり、index関数がHttprequponseをreturnしていないのが原因なので、シンプルな形では
def index(request):
return HttpResponse('')
にすれば動くかと思います。

投稿2019/02/12 00:21

ryotax

総合スコア142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Environment: Request Method: GET Request URL: http://127.0.0.1:8000/sns/ 〜 省略 〜 Exception Type: ValueError at /sns/ Exception Value: The view sns.views.index didn't return an HttpResponse object. It returned None instead.

これは index関数 の中で HTTPResponseオブジェクトをreturnしてないのでエラーだよということを言っています。上記コードを見る限り index 関数は POST メソッドの時の処理しか書いていません。

def index(request): (public_user, public_group) = get_public() if request.method == 'POST': # 続くコードは全部このブロックの中

エラーにもあるとおり Request Method: GET でアクセスしてるので GET でアクセスした時の処理をちゃんとかけばエラーは回避されます。 もう一度本のコードと、自分のコードを見比べてみてください。インデントが違っていたりすると思います。

投稿2019/02/11 15:16

tell_k

総合スコア2120

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問