python jango 超入門 という参考書にあるミニSNSを作っているのですが、このエラーが出てきてしまい、調べても解決できません。
from django.shortcuts import render
from django.shortcuts import redirect
from django.contrib.auth.models import User
from django.contrib import messages
from .models import Message,Friend,Group,Good
from .forms import GroupCheckForm,GroupSelectForm, \
SearchForm,FriendsForm,CreateGroupForm,PostForm
from django.db.models import Q
from django.contrib.auth.decorators import login_required
#indexのビュー関数
@login_required(login_url='/admin/login/')
def index(request):
#publicのuserを取得
(public_user, public_group) = get_public()
#POST送信時の処理
if request.method == 'POST':
#Groupのチェックを更新した時の処理
if request.POST['mode'] == '__check_form__':
#フォームの用意
searchform = SearchForm()
checkform = GroupCheckForm(request.user, request.POST)
#チェックされたGroup名をリストにする
glist = []
for item in request.POST.getlist('groups'):
glist.append(item)
#Messageの取得
messages = get_your_group_message(request.user, \
glist, None)
if request.POST['mode'] == '__search_form__':
#フォームの用意
searchform = SearchForm(request.POST)
checkform = GroupCheckForm(request.user)
#Groupのリストを取得
gps = Group.objects.filter(owner=request.user)
glist = [public_group]
for item in gps:
glist.append(item)
#メッセージ取得
messages = get_your_group_message(request.user, glist, \
request.POST['search'])
#GETアクセス時の処理
else:
#フォームの用意
searchform = SearchForm()
checkform = GroupCheckForm(request.user)
#Groupのリストを取得
gps = Group.objects.filter(owner=request.user)
glist = [public_group]
for item in gps:
glist.append(item)
#メッセージの取得
messages = get_your_group_message(request.user, glist, None)
#共通処理
params = {
'login_user':request.user,
'contents':messages,
'check_form':checkform,
'search_form':searchform,
}
return render(request, 'sns/index.html',params)
@login_required(login_url='/admin/login/')
def groups(request):
#自分が登録したFriendを取得
friends = Friend.objects.filter(owner=request.user)
#POST送信時の処理
if request.method == 'POST':
#Groupメニュー選択肢の処理
if request.POST['mode'] == '__groups_form__':
#選択したGroupを取得
sel_group = request.POST['groups']
#Group取得
gp = Group.objects.filter(owner=request.user) \
.filter(title=sel_group).first()
#Groupに含まれるFriendを取得
fds = Friend.objects.filter(owner=request.user) \
.filter(group=gp)
#FriendのUserをリストにまとめる
vlist = []
for item in fds:
vlist.append(item.user.username)
#フォームの用意
groupsform = GroupSelectForm(request.user,request.POST)
friendsform = FriendsForm(request.user, \
friends=friends, vals=vlist)
#Friendsのチェック更新時の処理
if request.POST['mode'] == '__friends_form__':
#選択したGroupの取得
sel_group = request.POST['group']
group_obj = Group.objects.filter(title=sel_group).first()
#チェックしたFrindsを取得
sel_fds = request.POST.getlist('friends')
#FriendsのUserを取得
sel_users = User.objects.filter(username__in=sel_fds)
#Userのリストに含まれるユーザーが登録したFriendsを取得
fds = Friend.objects.filter(owner=request.user) \
.filter(user__in=sel_users)
#すべてのFriendにGroupを設定し保存する
vlist = []
for item in fds:
item.group = group_obj
item.save()
vlist.append(item.user.username)
#メッセージを設定
messages.success(request,'チェックされたFriendを' + \
sel_group + 'に登録しました。')
#フォームの用意
groupsform = GroupSelectForm(request.user, \
{'groups':sel_group})
friendsform = FriendsForm(request.user, \
friends=friends, vals=vlist)
#GETアクセス時の処理
else:
#フォームの用意
groupsform = GroupSelectForm(request.user)
friendsform = FriendsForm(request.user, friends=friends, \
vals=[])
sel_group = '-'
#共通処理
createform = CreateGroupForm()
params = {
'login_user':request.user,
'groups_form':groupsform,
'friends_form':friendsform,
'create_form':createform,
'group':sel_group,
}
return render(request, 'sns/groups.html', params)
#Friendの追加処理
@login_required(login_url='/admin/login/')
def add(request):
#追加するUser取得
add_name = request.GET['name']
add_user = User.objects.filter(username=add_name).first()
#Userが本人の場合の処理
if add_user == request.user:
messages.info(request, "自分自身をFriendにすることは\
できません。")
return redirect(to='/sns')
#publicの取得
(public_user, public_group) = get_public()
#add_userのFriendの数を調べる
frd_num = Friend.objects.filter(owner=request.user) \
.filter(user=add_user).count()
#0より大きければすでに登録済み
if frd_num > 0:
messages.info(request, add_user.username + \
'は既に追加されています。')
return redirect(to='/sns')
#friend登録処理
frd = Friend()
frd.owner = request.user
frd.user = add_user
frd.group = public_group
frd.save()
#メッセージを設定
messages.success(request, add_user.username + 'を追加しました! \
groupページに移動して、追加したFriendをメンバーに設定してください')
return redirect(to='/sns')
#グループの作成処理
@login_required(login_url='/admin/login/')
def creategroup(request):
#Groupを作り、Userとtitleを設定して保存する
gp = Group()
gp.owner = request.user
gp.title = request.POST['group_name']
gp.save()
messages.info(request,'新しいグループを作成しました。')
return redirect(to='/sns/groups')
#メッセージのポスト処理
@login_required(login_url='/admin/login/')
def post(request):
#POST送信の処理
if request.method == 'POST':
#送信内容の取得
gr_name = request.POST['groups']
content = request.POST['content']
#Groupの取得
group = Group.objects.filter(owner=request.user)\
.filter(title=gr_name).first()
if group == None:
(pub_user, group) = get_public()
#Messageを作成し設定して保存
msg = Message()
msg.owner = request.user
msg.group = group
msg.content = content
msg.save()
#メッセージを取得
messages.success(request,'新しいメッセージを投稿しました。')
return redirect(to='/sns')
#GETアクセス時の処理
else:
form = PostForm(request.user)
params = {
'login_user':request.user,
'form':form,
}
return render(request, 'sns/post.html', params)
#投稿をシェアする
@login_required(login_url='/admin/login/')
def share(request, share_id):
#シェアするメッセージの取得
share = Message.objects.get(id=share_id)
#POST送信時の処理
if request.method == 'POST':
#送信内容を取得
gr_name = request.POST['groups']
content = request.POST['content']
#Groupの取得
group = Group.objects.filter(owner=request.user) \
.filter(title=gr_name).first()
if group == None:
(pub_user, group) = get_public()
#メッセージを作成し、設定して保存
msg = Message()
msg.owner = request.user
msg.group = group
msg.content = content
msg.share_id = share.id
msg.save()
share_msg = msg.get_share()
share_msg.share_count += 1
share_msg.save()
#メッセージを設定
messages.success(request,'メッセージをシェアしました')
return redirect(to='/sns')
#共通処理
form = PostForm(request.user)
params = {
'login_user':request.user,
'form':form,
'share':share,
}
return render(request, 'sns/share.html',params)
#Goodボタンの処理
@login_required(login_url='/admin/login/')
def good(request, good_id):
good_msg = Message.objects.get(id=good_id)
is_good = Good.objects.filter(owner=request.user)\
.filter(message=good_msg).count()
if is_good > 0:
messages.success(request, '既にメッセージをGoodしています。')
return redirect(to='/sns')
good_msg.good_count += 1
good_msg.save()
good = Good()
good.owner = request.user
good.message = good_msg
good.save()
messages.success(request,'メッセージをGoodしました!')
return redirect(to='/sns')
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
おそらくですけど
if request.method == 'POST':
でHttpResponseをreturnで返してますけどGET
のときに返していないところがあるので、そこが原因だとおもいます。
if request.method == 'POST':
return HttpResopnse
return HttpResponse # <- これが無い
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
急ですいません。実は私も、この参考書を買い、djangoを学んでいて、同じところでつまづいています。どこのコードを直して解決したのか教えてれませんか?お願いします。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.20%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
tatamyiwathy
2019/12/03 14:12
views.pyはどのようになっているでしょうか?
hayataka2049
2019/12/03 14:19
過去質問はリンクで示してください。
(できればマークダウンで、難しいのであればURLをそのまま書いても構いませんが、スクショはさすがに困ります)
omocchi
2019/12/03 22:26
すみません。。
今確認したらその過去質問はhayataka2049様の解答のものでした!
https://teratail.com/questions/173758
omocchi
2019/12/03 22:38
views.pyをのせようとしたら文字数制限で出来ませんでした。
出来る範囲だけでのせてもよろしいでしょうか。。
お手数おかけして申し訳ありません。