如何求解ValueError:必须设置给定的用户名
我正在尝试使用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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论