POST method does not pass the value password from the input field

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

Leave a Reply

(*) Required, Your email will not be published