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

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

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

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1218閲覧

djangoでユーザー情報を取得する multivaluedictkeyerror at /loginsで阻まれる

penpenpen

総合スコア11

Django

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2022/01/03 16:52

やりたいこと
新規登録>ログイン>個人ページ と行き
個人ページであなたは 「アクセスしてるユーザーネーム」 です と表示させたい

状況
MultiValueDictKeyError at /Loginsというエラーに阻まれる
ホーム ログイン 新規登録 個人ページの四つがあり 個人ページの作成中にエラーが発生

ログインページを経由の場合 (登録済みだがログインはしてないアカウントを使用)
Logins>info>    結果 multivaluedictkeyerror at /logins

直接アクセスの場合(http://127.0.0.1:8000/info)
info>        結果 あなたはroot(スーパーユーザー)です
スーパーユーザーがログアウト状態の時は あなたはNoneです、となります

一応直接いけば表示はされるのですが一般ユーザーが使うログイン画面からはアクセスできません
なぜこのようなことになるのでしょうか?

ログインページ

def Logins(request): massege="" if (request.method=="POST"): username = request.POST['username'] raw_password = request.POST['password1'] user = authenticate(username=username, password=raw_password) if user: if user.is_active: # ログイン #login(request,user) return short.redirect(to="/info") else: return HttpResponse("アカウントが有効ではありません") else: massege="ログインIDまたはパスワードが間違っています" return short.render(request, 'logins/login.html',{"massege":massege})

エラーが出ているページ #user = request.userでも同様の挙動

def info(request): #user = request.user aa=request.user.username massege="新しいキャラを追加してください" if (request.method == 'POST'): form = touhou_Add(request.POST) if form.is_valid(): form.save() massege="追加されたはず..." else: massege="ちゃんと書け!!!!" val = touhou.objects.all() val_2 = touhou.objects.values() header = ['ID','名前',"能力","性別","居住","年齢"] my_dict2 = { 'form':touhou_Add(), "massege":massege, 'title':'テスト', 'header': header, "val":val, "val2":val_2, "tokutei":aa } return short.render(request, 'info.html', my_dict2)

エラーが出ているページHTML側 関係ない部分は省きました
info.html

<p>あなたは {{tokutei}} です</p><br>

エラー

MultiValueDictKeyError at /Logins 'username' Request Method: POST Request URL: http://127.0.0.1:8000/Logins Django Version: 3.2.10 Exception Type: MultiValueDictKeyError Exception Value: 'username' Exception Location: C:\Users\PC_User\Anaconda3\envs\pyflan\lib\site-packages\django\utils\datastructures.py, line 78, in __getitem__ Python Executable: C:\Users\PC_User\Anaconda3\envs\pyflan\python.exe Python Version: 3.7.7 Python Path: ['C:\Users\PC_User\Desktop\test\python_flan', 'C:\Users\PC_User\Anaconda3\envs\pyflan\python37.zip', 'C:\Users\PC_User\Anaconda3\envs\pyflan\DLLs', 'C:\Users\PC_User\Anaconda3\envs\pyflan\lib', 'C:\Users\PC_User\Anaconda3\envs\pyflan', 'C:\Users\PC_User\AppData\Roaming\Python\Python37\site-packages', 'C:\Users\PC_User\Anaconda3\envs\pyflan\lib\site-packages', 'c:\users\pc_user\desktop\ml-agents-0.15.0\ml-agents-envs', 'c:\users\pc_user\desktop\ml-agents-0.15.0\ml-agents', 'C:\Users\PC_User\Anaconda3\envs\pyflan\lib\site-packages\win32', 'C:\Users\PC_User\Anaconda3\envs\pyflan\lib\site-packages\win32\lib', 'C:\Users\PC_User\Anaconda3\envs\pyflan\lib\site-packages\Pythonwin'] Server time: Tue, 04 Jan 2022 01:09:37 +0900

参考
https://wonderwall.hatenablog.com/entry/2018/03/25/180000 古いですがこれしかみつかりませんでした
https://kuma-server.com/django-request/#toc2

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

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

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

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

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

guest

回答1

0

ベストアンサー

フォームの取得方法が違います。ディクショナリ型を取得する場合は、getメソッドを用いたはず。フォーム転送形式のGETと紛れやすいですが、それとは別物です。

views.py:request.POST/GETから値を取得する方法

py

1 username = request.POST.get('username',"") #第2引数は取得されなかった場合のデフォルト値 2 raw_password = request.POST.get('password1',"")

投稿2022/01/04 01:14

FKM

総合スコア3640

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

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

penpenpen

2022/01/04 08:38

フォームではなく アクセスしてるユーザー名を表示したいんです(teratailだと右上に自分のアイコンが表示されてる みたいなやつです)
FKM

2022/01/05 00:30

それなら,usernameによって代入された値をrender関数で返すだけでいけると思います。 icecreamを用いて、変数を追跡すれば変数の流れも読みやすいです。 https://qiita.com/purun/items/c7aca300b970344214cf
penpenpen

2022/01/05 20:33

,usernameによって代入 がわかりません request.POST.get('username',"") request.user.username それっぽいもの試したんですが症状は変わりません
penpenpen

2022/01/05 20:35

値を取り出す方法がわかりません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問