エンジニアへの道のり[其の3]
[環境]
Editor : Visual Studio Code(Ubuntu)
Python version : 3.8.5
Django version : 3.2.3
OS : Windows10
<HEADER>
おはようございます。
今日はdjangoで1日苦戦したエラーが解決できたので記録していきたいと思います。
<BODY>
出たエラーは[MultiValueDictKeyError]です。
それで調べてみた結果
[views.py]
from django.shortcuts import render
from django.contrib.auth.models import User
def signupfunc(request):
if request.method == "POST":
username = request.POST["username"] ←この部分
password = request.POST["password"]
user = User.objects.create_user(username,'', password)
return render(request,'signup.html',{'some' : 100})
この部分をいう箇所を
[views.py]
from django.shortcuts import render
from django.contrib.auth.models import User
def signupfunc(request):
if request.method == "POST":
username = request.POST.get("username") ←こうして
password = request.POST["password"]
user = User.objects.create_user(username,'', password)
return render(request,'signup.html',{'some' : 100})
こういう感じにすれば治りました。
が、自分の場合また違うエラーが出てきてしまい、
[valueerror]というものが発生しました。
この原因はおそらく、[templates]の[signup.html]で
[signup.html]
{% extends 'base.html' %}
{% block content %}
<body class="text-center">
<form class="form-signin" method="POST">{% csrf_token %}
<h1 class="h3 mb-3 fw-normal">サインインする</h1>
<label for="inputEmail" class="visually-hidden">ユーザー</label>
<input type="text" id="inputEmail" class="form-control" placeholder="ユーザー" name='username' required autofocus>
<label for="inputPassword" class="visually-hidden">パスワード</label>
<input type="password" id="inputPassword" class="form-control" placeholder="パスワード" name='password' required>
<button class="w-100 btn btn-lg btn-primary" type="submit">サインイン</button>
<p class="mt-5 mb-3 text-muted">© 2017-2021</p>
</form>
</body>
{% endblock content %}
[name='username']のところを[name='uesrname']と最初に機材していたことが原因だと思います。
それで、
[views.py]
from django.shortcuts import render
from django.contrib.auth.models import User
def signupfunc(request):
if request.method == "POST":
username = request.POST.get("username") ←ここ
password = request.POST["password"]
user = User.objects.create_user(username,'', password)
return render(request,'signup.html',{'some' : 100})
”ここ”というところを[uesrname]に変えた結果無事エラーがなくなりました。
まだ、思うところはありますが、一応解決したということで、次に行きたいと思います。
<FOOTER>
本日は、エラーを解決できたという記録でした。
エラー解決できたものはいいもののごタイピングが多いのが原因なので、何とかしていきたいです。
・[MultiValueDictKeyError]が出た際は、get()を使う。
・ごタイピングがあるかどうか徹底的に確認する。
・どうしてもわからない場合はいったん休憩する。
以上です。