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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

1282閲覧

Djangoでのフォーム取得とDB比較について

kazzzstudio

総合スコア94

Django

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2017/08/20 06:37

PythonとDjangoでWebアプリを作っていますが、Djangoでのフォームからの値取得と、その値をデータベースに格納されている値と比較する処理がうまくいかずハマっています。

たぶん、基本的なことではないかとは思うのですが、調べても解決できなかったので質問させてください。

フォームからdoctor_idとpasswordを取得して、取得したdoctor_idからデータベースに格納されているDoctorテーブルのdoctor_passwordを取得して、フォームからのpasswordと一致しているかどうかを比較する処理です。

アドバイスをいただけると幸いです。
よろしくお願いいたします。

model.py

class Doctor(models.Model): doctor_id = models.CharField(max_length=16, primary_key=True) clinic_id = models.ForeignKey(Clinic) doctor_email = models.CharField(max_length=64) doctor_password = models.CharField(max_length=32) doctor_name = models.CharField(max_length=32) create_date = models.DateTimeField(auto_now_add=True) modify_date = models.DateTimeField(auto_now=True)

form.py

from django import forms from .models import Doctor class LoginForm(forms.Form): # userid = forms.CharField() # password = forms.CharField() class Meta: model = Doctor fields = ('doctor_id', 'doctor_password',)

views.py

from django.shortcuts import get_object_or_404, render from django.http import HttpResponse from django.shortcuts import render # from django.contrib.auth import authenticate, login from django.contrib.auth.decorators import login_required # from django.views.decorators.csrf import ensure_csrf_cookie from .forms import LoginForm from .models import Doctor # @ensure_csrf_cookie def user_login(request): if request.method == 'POST': form = LoginForm(request.POST) if form.is_valid(): # _id = id_username # _password = id_password # question = get_object_or_404(Doctor,) # question.choice_set.get(pk=request.POST['userid']) # _id = request.username # _password = request.password # # cd = form.cleaned_data # user = authenticate(username=cd['username'], password=cd['password']) _id = form.cleaned_data['doctor_id'] _password = form.cleaned_data['doctor_password'] # doctor_password = Doctor.doctor_password.get(doctor_id=_id) b = Doctor.objects.all().filter(doctor_id=_id) print (doctor_password) if _password is doctor_password: # if user.is_active: login(request, user) return HttpResponse('Authenticated successfully') # else: # return HttpResponse('Disabled account') else: return HttpResponse('Invalid login') else: form = LoginForm() return render(request, 'apiv1/login.html', {'form': form})

login.html

{% extends "base.html" %} {% load staticfiles%} {% block title%}りもしん クリニック様システムログイン画面{% endblock %} {% block remoshincss %}/static/css/style.css{% endblock %} {% block content %} <div class="container"> <div align="center" class="imgtop"><img id="profile-img" class="profile-img-card" src="/static/img/remoshinlogo.png" /></div> <div class="card card-container"> <p id="profile-name" class="profile-name-card"></p> <form class="form-signin" action="{% url 'login' %}" method="post">{% csrf_token %} <!-- <span id="reauth-email" class="reauth-email"></span> --> <input type="user" id="userid" name="userid" class="form-control inputUser" placeholder="ユーザーID" autofocus> <input type="password" id="password" name="password" class="form-control inputPassword" placeholder="パスワード"> <input type="hidden" name="next" value="{{ next }}" /> <div class="this" align="center">パスワードをお忘れの方は<a href="password.html">こちら</a></div> <br> <div align="center"><button style="width: 200px;" class="btn btn-lg btn-primary btn-block btn-signin" type="submit"><font color="#708090">ログイン</font></button></div> </form> </div> </div> {% endblock %}

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

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

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

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

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

tell_k

2017/08/21 05:41

具体的にソースのどこの処理で困ってるのか、書いてもらった方が回答がつきやすいと思います。
kacchan822

2017/08/21 22:10

うまくいかないということなので、何らかのエラーが出ているものと推察します。試してみたことと、それでも発生するエラーまたは期待しない動作がどのようなものか、記載していただくとよいかと思います。
guest

回答1

0

ベストアンサー

どのファイルのどこで、どんなエラーが発生しているのか
生エラーコード貼り付けでも構わないので教えてもらえると、もっと具体的なアドバイスができます。

現状として、修正した方が良いと思う点は3点

  • 全体的に、コメント文は本当にコメント文?

例えば、views.py内のこの記述

python

1if _password is doctor_password: 2 # if user.is_active: 3 login(request, user) 4 return HttpResponse('Authenticated successfully') 5 # else: 6 # return HttpResponse('Disabled account')

このままだとPython文法的に動かないですよね?(Syntax Errorのはず)
各コメント文が本当にコメント文なのか、明記しておいてほしいです。

  • Formクラス?

Formクラスを作ったのに、テンプレートlogin.htmlに生formを記述してしまうのですか?
例えばこちらのQiitaリンク見て、login.htmlを作り直した方が良いかと。
DjangoのForm(CreateView、UpdateViewなど)について

  • 生パスワード保存はちょっと……

質問内容とはズレてしまいますが……DBに生パスワードを保存し、比較するのは(セキュリティ的に)やめておいた方がいいかと……
AbstractUserを使うなどして、回避した方がいいかもしれません。

投稿2017/08/26 03:01

RyuSA

総合スコア131

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

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

kazzzstudio

2017/08/26 04:06

ご回答ありがとうございます。 いろいろいじって、Djangoの認証処理を採用する方向でプログラムを書き直しました。 たくさん問題点があったのですね。ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問