如何求解ValueError:必须设置给定的用户名

发布于 2025-01-22 10:23:45 字数 11287 浏览 0 评论 0原文

我正在尝试使用Python Django注册用户。使用JavaScript提供验证。当用户输入他或她的详细信息并单击“注册”按钮时,数据将存储在数据库中。假设如果用户单击“注册”按钮而无需输入其详细信息,则我会遇到下面的错误。

ValueError at /Accounts/CandidateRegister/
The given username must be set
Request Method: POST
Request URL:    http://127.0.0.1:8000/Accounts/CandidateRegister/
Django Version: 4.0.2
Exception Type: ValueError
Exception Value:    
The given username must be set
Exception Location: C:\job\venv\lib\site-packages\django\contrib\auth\models.py, line 137, in _create_user
Python Executable:  C:\job\venv\Scripts\python.exe
Python Version: 3.9.7
Python Path:    
['C:\\job\\jobsite',
 'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip',
 'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39\\DLLs',
 'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39\\lib',
 'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39',
 'C:\\job\\venv',
 'C:\\job\\venv\\lib\\site-packages']
Server time:    Tue, 19 Apr 2022 10:51:00 +0530

我不明白,即使提供了JavaScript验证,为什么会发生此错误。谁能有任何想法来解决这个问题。

html

<form style="padding:10px 25%;" class="signup-form" id="candidate" name="candidate" method="POST" action="{% url 'candidateregister' %}">
                         {% csrf_token %}
                      <div class="form-row">
                        <div class="form-group col-md-6">
                          <label for="cafname" style="font: normal normal normal 14px Poppins;">First name</label>
                          <input type="text" class="form-control" id="cafname" name="cafname" placeholder="Your first name" style="font-family:sans-serif;border:2px solid #d4d2d2;">
                          <span id="lfname" class="regval"></span>
                        </div>
                        <div class="form-group col-md-6">
                          <label for="calname" style="font: normal normal normal 14px Poppins;">Last name</label>
                          <input type="text" class="form-control" id="calname" name="calname" placeholder="Your last name" style="font-family:sans-serif;border:2px solid #d4d2d2;">
                          <span id="llname" class="regval"></span>
                        </div>
                      </div>
                      <div class="form-group">
                        <label for="caemorpn" style="font: normal normal normal 14px Poppins;">Email or Phone number</label>
                        <input type="text" class="form-control" id="caemorpn" name="caemorpn" placeholder="Enter email or phone number" style="font-family:sans-serif;border:2px solid #d4d2d2;">
                        <span id="lemorpn" class="regval"></span>
                      </div>
                      <div class="form-group">
                        <label for="capassword1" style="font: normal normal normal 14px Poppins;">Password</label>
                        <input type="password" class="form-control" id="capassword1" name="capassword1" placeholder="Enter your password" style="font-family:sans-serif;border:2px solid #d4d2d2;">
                        <span id="lpass" class="regval"></span>
                      </div>
                      <div class="form-group">
                        <label for="capassword2" style="font: normal normal normal 14px Poppins;">Confirm Password</label>
                        <input type="password" class="form-control" id="capassword2" name="capassword2" placeholder="Confirm your password" style="font-family:sans-serif;border:2px solid #d4d2d2;">
                        <span id="lcpass" class="regval"></span>
                      </div>
                      <div class="form-group">
                        <div class="form-check">
                          <input class="form-check-input" type="checkbox" id="cagridCheck" name="cagridCheck" style="font-family:sans-serif;border:2px solid #d4d2d2;">
                          <label class="form-check-label mt-3" for="cagridCheck" style="font: normal normal normal 14px Poppins;color: #000000;">
                              I agree with the <a href="" style="color:#5A71E1;text-decoration:none;font: normal normal 600 14px Poppins;">Terms and conditions</a>
                          </label><br>
                          <span id="lcheck" class="regval"></span>
                        </div>
                      </div>
                      <input type="hidden"  id="catype" name="catype" value="Candidate"/>
                        {% for msg in messages %}
                            <center>
                                <h4 style="color:red;">{{msg}}</h4>
                            </center>
                        {% endfor %}
                      <button type="submit" class="btn btn-primary btn-block btype" style="background-color:#486DFC;margin-top:5%;font-family:Poppins;" onclick="return candiregister()">SIGN UP</button>
                    </form>
<script src="{% static 'js/register.js' %}"></script>

Views.py

from django.contrib.auth import get_user_model

def candidateregister(request):
    User = get_user_model()
    if request.method=='POST':
        fname = request.POST.get('cafname')
        lname = request.POST.get('calname')
        email_phone = request.POST.get('caemorpn')
        password1 = request.POST.get('capassword1')
        password2 = request.POST.get('capassword2')
        terms = request.POST.get('cagridCheck')
        type = request.POST.get('catype')
        if terms == 'on':
            terms = True
        else:
            terms = False

        regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'

        if (re.fullmatch(regex, email_phone)):
            if (User.objects.filter(email=email_phone).exists()):
                messages.info(request, "Email ID Already Taken")
                return redirect('register')
            user = User.objects.create_user(first_name=fname,last_name=lname,password=password1,terms_and_conditions_confirmed=terms,type=type,email=email_phone,username=email_phone)
            user.save()
            send_action_email(user,request)
            messages.add_message(request, messages.SUCCESS, 'We sent you an Email to verify Your Account...')
            return redirect('login')
        else:
            print(email_phone)
            if (User.objects.filter(phone=email_phone).exists()):
                messages.info(request, "Phone number Already Taken")
                return redirect('register')
            user = User.objects.create_user(first_name=fname, last_name=lname, password=password1,terms_and_conditions_confirmed=terms, type=type, username=email_phone,phone=email_phone)
            user.save()

JavaScript

function candiregister()
{
    if(document.candidate.cafname.value=="")
    {
        document.getElementById("cafname").style.border= "2px solid Red";
        document.querySelector("#cafname").style.setProperty("--c", "red");
        document.getElementById("lfname").innerHTML="Enter Your First Name";
        return false;
    }
    else
    {

        document.getElementById("lfname").innerHTML="";
    }

    if(document.candidate.calname.value=="")
    {
        document.getElementById("calname").style.border= "2px solid Red";
        document.querySelector("#calname").style.setProperty("--c", "red");
        document.getElementById("llname").innerHTML="Enter Your Last Name";
        return false;
    }
    else
    {

        document.getElementById("llname").innerHTML="";
    }
    if(document.candidate.caemorpn.value=="")
    {
        document.getElementById("caemorpn").style.border= "2px solid Red";
        document.querySelector("#caemorpn").style.setProperty("--c", "red");
        document.getElementById("lemorpn").innerHTML="Enter a Valid Email ID or a Mobile Number(eg:+919999999999)";
        return false;
    }
    else
    {
        document.getElementById("lemorpn").innerHTML="";
        var mailformat = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/;
        var phoneformat = /^((\+){1}91){1}[98765]{1}[0-9]{9}$/;
        if(document.candidate.caemorpn.value.match(mailformat))
            document.getElementById("lemorpn").innerHTML="";
        else if(document.candidate.caemorpn.value.match(phoneformat))
            document.getElementById("lemorpn").innerHTML="";
        else
        {
            document.getElementById("caemorpn").style.border= "2px solid Red";
            document.querySelector("#caemorpn").style.setProperty("--c", "red");
            document.getElementById("lemorpn").innerHTML="Entered Value is not an Email or Mobile Number(eg:+919999999999)";
            return false;
        }
    }
    if(document.candidate.capassword1.value=="")
    {
        document.getElementById("capassword1").style.border= "2px solid Red";
        document.querySelector("#capassword1").style.setProperty("--c", "red");
        document.getElementById("lpass").innerHTML="Enter Password";
        return false;
    }
    else
    {
        var pregexp=/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
        if(document.candidate.capassword1.value.match(pregexp))
               document.getElementById("lpass").innerHTML="";
        else
        {
               document.getElementById("capassword1").style.border= "2px solid Red";
               document.querySelector("#capassword1").style.setProperty("--c", "red");
               document.getElementById("lpass").innerHTML="Contains eight characters,upper&lowercase letter,digit&special characters";
               return false;
        }
    }
    if(document.candidate.capassword2.value=="")
    {
        document.getElementById("capassword2").style.border= "2px solid Red";
        document.querySelector("#capassword2").style.setProperty("--c", "red");
        document.getElementById("lcpass").innerHTML="Enter Password";
        return false;
    }
    else
    {
        document.getElementById("lcpass").innerHTML="";
        if(document.candidate.capassword1.value!=document.candidate.capassword2.value)
       {
            document.getElementById("capassword2").style.border= "2px solid Red";
            document.querySelector("#capassword2").style.setProperty("--c", "red");
            document.getElementById("lcpass").innerHTML="Password Mismatch";
            return false;
       }
       else

           document.getElementById("lcpass").innerHTML="";
    }
    if(document.getElementById("cagridCheck").checked)
    {
        document.getElementById("lcheck").innerHTML="";
    }
    else
    {
        document.getElementById("cagridCheck").style.border= "2px solid Red";
        document.querySelector("#cagridCheck").style.setProperty("--c", "red");
        document.getElementById("lcheck").innerHTML="Please Tick the Checkbox";
        return false;
    }

}

I am trying to register a user using Python Django. Validations are provided using JavaScript. When a user enter his or her details and click the sign up button, the data will be stored in the database. Suppose if a user click on the sign up button without entering their details, I am getting an error like below.

ValueError at /Accounts/CandidateRegister/
The given username must be set
Request Method: POST
Request URL:    http://127.0.0.1:8000/Accounts/CandidateRegister/
Django Version: 4.0.2
Exception Type: ValueError
Exception Value:    
The given username must be set
Exception Location: C:\job\venv\lib\site-packages\django\contrib\auth\models.py, line 137, in _create_user
Python Executable:  C:\job\venv\Scripts\python.exe
Python Version: 3.9.7
Python Path:    
['C:\\job\\jobsite',
 'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip',
 'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39\\DLLs',
 'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39\\lib',
 'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39',
 'C:\\job\\venv',
 'C:\\job\\venv\\lib\\site-packages']
Server time:    Tue, 19 Apr 2022 10:51:00 +0530

I did not understand why this error occurs even if the JavaScript validation provided. Can anyone have any idea to solve this issue.

html

<form style="padding:10px 25%;" class="signup-form" id="candidate" name="candidate" method="POST" action="{% url 'candidateregister' %}">
                         {% csrf_token %}
                      <div class="form-row">
                        <div class="form-group col-md-6">
                          <label for="cafname" style="font: normal normal normal 14px Poppins;">First name</label>
                          <input type="text" class="form-control" id="cafname" name="cafname" placeholder="Your first name" style="font-family:sans-serif;border:2px solid #d4d2d2;">
                          <span id="lfname" class="regval"></span>
                        </div>
                        <div class="form-group col-md-6">
                          <label for="calname" style="font: normal normal normal 14px Poppins;">Last name</label>
                          <input type="text" class="form-control" id="calname" name="calname" placeholder="Your last name" style="font-family:sans-serif;border:2px solid #d4d2d2;">
                          <span id="llname" class="regval"></span>
                        </div>
                      </div>
                      <div class="form-group">
                        <label for="caemorpn" style="font: normal normal normal 14px Poppins;">Email or Phone number</label>
                        <input type="text" class="form-control" id="caemorpn" name="caemorpn" placeholder="Enter email or phone number" style="font-family:sans-serif;border:2px solid #d4d2d2;">
                        <span id="lemorpn" class="regval"></span>
                      </div>
                      <div class="form-group">
                        <label for="capassword1" style="font: normal normal normal 14px Poppins;">Password</label>
                        <input type="password" class="form-control" id="capassword1" name="capassword1" placeholder="Enter your password" style="font-family:sans-serif;border:2px solid #d4d2d2;">
                        <span id="lpass" class="regval"></span>
                      </div>
                      <div class="form-group">
                        <label for="capassword2" style="font: normal normal normal 14px Poppins;">Confirm Password</label>
                        <input type="password" class="form-control" id="capassword2" name="capassword2" placeholder="Confirm your password" style="font-family:sans-serif;border:2px solid #d4d2d2;">
                        <span id="lcpass" class="regval"></span>
                      </div>
                      <div class="form-group">
                        <div class="form-check">
                          <input class="form-check-input" type="checkbox" id="cagridCheck" name="cagridCheck" style="font-family:sans-serif;border:2px solid #d4d2d2;">
                          <label class="form-check-label mt-3" for="cagridCheck" style="font: normal normal normal 14px Poppins;color: #000000;">
                              I agree with the <a href="" style="color:#5A71E1;text-decoration:none;font: normal normal 600 14px Poppins;">Terms and conditions</a>
                          </label><br>
                          <span id="lcheck" class="regval"></span>
                        </div>
                      </div>
                      <input type="hidden"  id="catype" name="catype" value="Candidate"/>
                        {% for msg in messages %}
                            <center>
                                <h4 style="color:red;">{{msg}}</h4>
                            </center>
                        {% endfor %}
                      <button type="submit" class="btn btn-primary btn-block btype" style="background-color:#486DFC;margin-top:5%;font-family:Poppins;" onclick="return candiregister()">SIGN UP</button>
                    </form>
<script src="{% static 'js/register.js' %}"></script>

views.py

from django.contrib.auth import get_user_model

def candidateregister(request):
    User = get_user_model()
    if request.method=='POST':
        fname = request.POST.get('cafname')
        lname = request.POST.get('calname')
        email_phone = request.POST.get('caemorpn')
        password1 = request.POST.get('capassword1')
        password2 = request.POST.get('capassword2')
        terms = request.POST.get('cagridCheck')
        type = request.POST.get('catype')
        if terms == 'on':
            terms = True
        else:
            terms = False

        regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'

        if (re.fullmatch(regex, email_phone)):
            if (User.objects.filter(email=email_phone).exists()):
                messages.info(request, "Email ID Already Taken")
                return redirect('register')
            user = User.objects.create_user(first_name=fname,last_name=lname,password=password1,terms_and_conditions_confirmed=terms,type=type,email=email_phone,username=email_phone)
            user.save()
            send_action_email(user,request)
            messages.add_message(request, messages.SUCCESS, 'We sent you an Email to verify Your Account...')
            return redirect('login')
        else:
            print(email_phone)
            if (User.objects.filter(phone=email_phone).exists()):
                messages.info(request, "Phone number Already Taken")
                return redirect('register')
            user = User.objects.create_user(first_name=fname, last_name=lname, password=password1,terms_and_conditions_confirmed=terms, type=type, username=email_phone,phone=email_phone)
            user.save()

JavaScript

function candiregister()
{
    if(document.candidate.cafname.value=="")
    {
        document.getElementById("cafname").style.border= "2px solid Red";
        document.querySelector("#cafname").style.setProperty("--c", "red");
        document.getElementById("lfname").innerHTML="Enter Your First Name";
        return false;
    }
    else
    {

        document.getElementById("lfname").innerHTML="";
    }

    if(document.candidate.calname.value=="")
    {
        document.getElementById("calname").style.border= "2px solid Red";
        document.querySelector("#calname").style.setProperty("--c", "red");
        document.getElementById("llname").innerHTML="Enter Your Last Name";
        return false;
    }
    else
    {

        document.getElementById("llname").innerHTML="";
    }
    if(document.candidate.caemorpn.value=="")
    {
        document.getElementById("caemorpn").style.border= "2px solid Red";
        document.querySelector("#caemorpn").style.setProperty("--c", "red");
        document.getElementById("lemorpn").innerHTML="Enter a Valid Email ID or a Mobile Number(eg:+919999999999)";
        return false;
    }
    else
    {
        document.getElementById("lemorpn").innerHTML="";
        var mailformat = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/;
        var phoneformat = /^((\+){1}91){1}[98765]{1}[0-9]{9}$/;
        if(document.candidate.caemorpn.value.match(mailformat))
            document.getElementById("lemorpn").innerHTML="";
        else if(document.candidate.caemorpn.value.match(phoneformat))
            document.getElementById("lemorpn").innerHTML="";
        else
        {
            document.getElementById("caemorpn").style.border= "2px solid Red";
            document.querySelector("#caemorpn").style.setProperty("--c", "red");
            document.getElementById("lemorpn").innerHTML="Entered Value is not an Email or Mobile Number(eg:+919999999999)";
            return false;
        }
    }
    if(document.candidate.capassword1.value=="")
    {
        document.getElementById("capassword1").style.border= "2px solid Red";
        document.querySelector("#capassword1").style.setProperty("--c", "red");
        document.getElementById("lpass").innerHTML="Enter Password";
        return false;
    }
    else
    {
        var pregexp=/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
        if(document.candidate.capassword1.value.match(pregexp))
               document.getElementById("lpass").innerHTML="";
        else
        {
               document.getElementById("capassword1").style.border= "2px solid Red";
               document.querySelector("#capassword1").style.setProperty("--c", "red");
               document.getElementById("lpass").innerHTML="Contains eight characters,upper&lowercase letter,digit&special characters";
               return false;
        }
    }
    if(document.candidate.capassword2.value=="")
    {
        document.getElementById("capassword2").style.border= "2px solid Red";
        document.querySelector("#capassword2").style.setProperty("--c", "red");
        document.getElementById("lcpass").innerHTML="Enter Password";
        return false;
    }
    else
    {
        document.getElementById("lcpass").innerHTML="";
        if(document.candidate.capassword1.value!=document.candidate.capassword2.value)
       {
            document.getElementById("capassword2").style.border= "2px solid Red";
            document.querySelector("#capassword2").style.setProperty("--c", "red");
            document.getElementById("lcpass").innerHTML="Password Mismatch";
            return false;
       }
       else

           document.getElementById("lcpass").innerHTML="";
    }
    if(document.getElementById("cagridCheck").checked)
    {
        document.getElementById("lcheck").innerHTML="";
    }
    else
    {
        document.getElementById("cagridCheck").style.border= "2px solid Red";
        document.querySelector("#cagridCheck").style.setProperty("--c", "red");
        document.getElementById("lcheck").innerHTML="Please Tick the Checkbox";
        return false;
    }

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文