Issue
Here form is submitted via POST method but password given in the input field of type=password not assigning to ‘upassword’ given in the userregister function.When I print the ‘upassword’ it gives an output "None".Also it gives an error like this when I give JAVASCRIPT validation.
Internal Server Error: /Salon/Registration/
Traceback (most recent call last):
File "C:\PYTHON\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\PYTHON\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\Project\salon\user\views.py", line 53, in salonregister
epassword = sha256(spassword.encode()).hexdigest()
AttributeError: 'NoneType' object has no attribute 'encode'
HTML file:
<!DOCTYPE html>
<html lang="en">
{% load static %}
<head>
<meta charset="UTF-8">
<title>Registration</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<link href="{% static 'styles/style.css' %}" rel="stylesheet"/>
<script src="jquery-3.5.1.min.js"></script>
</head>
<body>
<section class="sreg" id="sreg">
<div class="container-fluid">
<div class="htop">
<h4>Register Form</h4>
</div>
<div class="row">
<div class="col-12">
<form method="POST" name="contact" action="{%url 'salonregister' %}">
{%csrf_token%}
<div class="form-row">
<div class="form-group col-md-6">
<label for="fname">First Name</label>
<input type="text" class="form-control" id="fname" name="fname" placeholder="First Name">
<span id="lfname"></span>
</div>
<div class="form-group col-md-6">
<label for="lname">Last Name</label>
<input type="text" class="form-control" id="lname" name="lname" placeholder="Last Name">
<span id="llname"></span>
</div>
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" id="email" name="email" placeholder="Email">
<span id="lemail"></span>
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" id="password" name="pass" placeholder="Password">
<span id="lpass"></span>
</div>
<div class="form-group">
<label for="cpassword">Confirm Password</label>
<input type="password" class="form-control" id="cpassword" name="cpass" placeholder="Confirm Password">
<span id="lcpass"></span>
</div>
<div class="form-group">
<label for="mobile">Mobile</label>
<input type="text" class="form-control" id="mobile" name="mobile" placeholder="Mobile">
<span id="lmob"></span>
</div>
<div class="form-group">
<label for="address">Address</label>
<textarea class="form-control" id="address" name="address" rows="3" placeholder="Address"></textarea>
<span id="laddress"></span>
</div>
<center>
<button type="submit" class="btn btn-success" onsubmit="return register()">Submit</button>
</center>
</form>
{% for msg in messages %}
<center>
<h4 style="color:red;">{{msg}}</h4>
</center>
{% endfor %}
</div>
</div>
</div>
</section>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script src="{% static 'js/scriptfunction.js' %}"></script>
</body>
</html>
Javascript:
function register()
{
if(document.contact.fname.value=="")
{
document.getElementById("lfname").innerHTML="Enter Your First Name";
return false;
}
else
{
var regName = /^[a-zA-Z]+$/;
if(document.contact.fname.value.match(regName))
document.getElementById("lfname").innerHTML="";
else
{
document.getElementById("lfname").innerHTML="Inavalid Name";
return false;
}
}
if(document.contact.lname.value=="")
{
document.getElementById("llname").innerHTML="Enter Your Last Name";
return false;
}
else
{
var regName = /^[a-zA-Z]+$/;
if(document.contact.lname.value.match(regName))
document.getElementById("llname").innerHTML="";
else
{
document.getElementById("llname").innerHTML="Inavalid Name";
return false;
}
}
if(document.contact.email.value=="")
{
document.getElementById("lemail").innerHTML="Enter Email ID";
return false;
}
else
{
document.getElementById("lemail").innerHTML="";
var mailformat = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/;
if(document.contact.email.value.match(mailformat))
document.getElementById("lemail").innerHTML="";
else
{
document.getElementById("lemail").innerHTML="Invalid Email";
return false;
}
}
if(document.contact.pass.value=="")
{
document.getElementById("lpass").innerHTML="Enter Password";
return false;
}
else
{
var pregexp=/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
if(document.contact.pass.value.match(pregexp))
document.getElementById("lpass").innerHTML="";
else
{
document.getElementById("lpass").innerHTML="Contains eight characters,upper&lowercase letter,digit&special characters";
return false;
}
}
if(document.contact.cpass.value=="")
{
document.getElementById("lcpass").innerHTML="Enter Password";
return false;
}
else
{
document.getElementById("lcpass").innerHTML="";
if(document.contact.pass.value!=document.reg.cpass.value)
{
document.getElementById("lcpass").innerHTML="Password Mismatch";
return false;
}
else
document.getElementById("lcpass").innerHTML="";
}
if(document.contact.mobile.value=="")
{
document.getElementById("lmob").innerHTML="Enter Your Mobile Number";
return false;
}
else
{
var phoneno = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
if(document.contact.mobile.value.match(phoneno))
document.getElementById("lmob").innerHTML="";
else
{
document.getElementById("lmob").innerHTML="Invalid Mobile Number";
return false;
}
}
if(document.contact.address.value=="")
{
document.getElementById("laddress").innerHTML="Enter Your Address";
return false;
}
else
document.getElementById("laddress").innerHTML="";
}
views.py
from django.shortcuts import render,redirect,get_object_or_404
from django.contrib.auth import login,logout
from hashlib import sha256
from user.models import salonlogin,clientlogin,salonreg,clientreg, salondetails,bookingdetails,reviews,contact
from django.contrib import messages
def salonregister(request):
if request.method == 'POST':
sfname = request.POST.get('fname')
slname = request.POST.get('lname')
semail = request.POST.get('email')
spassword = request.POST.get('password')
scpassword = request.POST.get('cpassword')
epassword = sha256(spassword.encode()).hexdigest()
smobile = request.POST.get('mobile')
saddress = request.POST.get('address')
if (salonreg.objects.filter(Email=semail).exists()):
messages.info(request, "Email ID Already Taken")
return redirect('salonregister')
elif (spassword != scpassword):
messages.info(request, "Password Doesn't Match")
return redirect('salonregister')
elif (salonreg.objects.filter(Mobile=smobile).exists()):
messages.info(request, "Mobile Number Already Taken")
return redirect('salonregister')
else:
sloginobj = salonlogin()
sloginobj.Username = semail
sloginobj.Password = epassword
sloginobj.save()
ssalondetails = salondetails()
ssalondetails.Login_id = sloginobj
ssalondetails.save()
ssalonreg = salonreg()
ssalonreg.Login_id = sloginobj
ssalonreg.First_name = sfname
ssalonreg.Last_name = slname
ssalonreg.Email = semail
ssalonreg.Password = epassword
ssalonreg.Mobile = smobile
ssalonreg.Address = saddress
ssalonreg.save()
ssalondetail = salonreg.objects.get(Email=semail)
slid = ssalondetail.id
fsname = ssalondetail.First_name
lsname = ssalondetail.Last_name
request.session["sid"] = slid
return render(request, "owner.html", {'fsname': fsname , 'lsname': lsname})
else:
return render(request, "register.html")
urls.py
from django.urls import path,re_path
from . import views
urlpatterns=[
path('Salon/Registration/', views.salonregister, name="salonregister"),
]
Solution
You access password
and cpassword
while the name
you set for these fields is actually pass
and cpass
:
<input type="password" class="form-control" id="password" name="pass" placeholder="Password">
<input type="password" class="form-control" id="cpassword" name="cpass" placeholder="Confirm Password">
It will work if you change your code to use the correct field names:
spassword = request.POST.get('pass')
scpassword = request.POST.get('cpass')
You could have spotted that by looking at the actual data that is getting sent in the POST request, so my suggestion for the future is to always first inspect your request in the browser’s devtools.
Answered By – CherryDT
This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0