我正在嘗試使用表單設定登錄頁面的用戶身份驗證并將其與資料庫值進行比較,我的代碼有效,但后來我意識到如果我輸入任何密碼(如果資料庫中可用),我就會成功登錄。我想要做的是搜索郵件并獲取該用戶的密碼,而不是整個資料庫。我的資料庫不會包含重復的電子郵件,所以我不必擔心。我花了太多時間試圖弄清楚如何為電子郵件所在的同一用戶獲取密碼。
我的 login.views 看起來像這樣
def login(request):
if request.method == "POST":
form = Studentlogin(request.POST)
if form.is_valid():
email = form.cleaned_data.get('email')
password = form.cleaned_data.get('password')
user = User.objects.create_user(email, password)
try:
studentemail = students.objects.get(email=email)
studentpass = students.objects.get(password=password)
return render (request, 'subscrap/main.html', {'student': studentemail })
except:
messages.success(request, 'Error, either Email or Password is not correct')
pass
else:
form = Studentlogin()
return render(request, 'subscrap/login.html', {'form': form})
我的學生模型如下所示:
class students(models.Model):
fname = models.CharField(max_length=50)
lname = models.CharField(max_length=50)
password = models.CharField(max_length = 50 , null = True)
passwordrepeat = models.CharField(max_length = 50, null = True)
email = models.EmailField(max_length=150)
class Meta:
db_table = "students"
我的表單檔案:
class StudentForm(forms.ModelForm):
class Meta:
model = students
fields = "__all__"
class Studentlogin(forms.Form):
email = forms.EmailField(max_length=150)
password = forms.CharField(max_length = 50, widget=forms.PasswordInput)
uj5u.com熱心網友回復:
您只需要進行一次查詢即可獲得具有給定電子郵件和密碼的學生:
def login(request):
if request.method == "POST":
form = Studentlogin(request.POST)
if form.is_valid():
email = form.cleaned_data.get('email')
password = form.cleaned_data.get('password')
user = User.objects.create_user(email, password)
try:
student = students.objects.get(email=email, password=password)
return render (request, 'subscrap/main.html', {'student': student})
except:
messages.success(request, 'Error, either Email or Password is not correct')
else:
form = Studentlogin()
return render(request, 'subscrap/login.html', {'form': form})
uj5u.com熱心網友回復:
您在學生模型上設定的查詢students.objects.get(email=email)回傳一個 SINGLE student OBJECT,其中他們的電子郵件等于從表單中檢索到的電子郵件。更準確的變數名稱是student. 如果沒有匹配的記錄,Note.get()將回傳DoesNotExist錯誤。
從你所擁有的你可以做(??不理想)
try
student = students.objects.get(email=email)
if student.password == password:
return render (request, 'subscrap/main.html', {'student': email}) # (or student.email)
else:
raise Exception()
except:
messages.success(request, 'Error, either Email or Password is not correct')
以 RedWheelbarrow 所寫的內容為基礎。他們的查詢集根據誰同時擁有精確email和password. 查詢集仍然回傳一個學生,所以如果你只想在你的渲染中回傳電子郵件,你需要做
try:
student = students.objects.get(email=email, password=password)
return render (request, 'subscrap/main.html', {'student': email}) # (or student.email)
except:
messages.success(request, 'Error, either Email or Password is not correct')
在此處閱讀有關 qeuerysetget方法的更多資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/354797.html
標籤:Python mysql 姜戈 验证 django-forms
上一篇:Mongoose獲取帶條件的欄位
下一篇:開發服務器上的Vuex-OIDC
