django - 在 django 中创建注册视图,总是出现完整性错误
问题描述
所以这是我为视图编写的函数:
def register(request):
if request.method == "POST":
username = request.POST["username"]
email = request.POST["email"]
year = request.POST["Year"]
form = registerForm(request.POST)
if form.is_valid():
branch = form.cleaned_data['branch']
else:
return render(request, "events/register.html", {
"message": "You didn't provide all the fields",
"form": registerForm()
})
if not email.endswith("ac.in"):
return render(request, "events/register.html", {
"message": "You must have an institution account",
"form": registerForm()
})
# Ensure password matches confirmation
password = request.POST["password"]
confirmation = request.POST["confirmation"]
if password != confirmation:
return render(request, "events/register.html", {
"message": "Passwords must match.",
"form": registerForm()
})
try:
name = User.objects.get(email=email)
except ObjectDoesNotExist :
name = None
# Attempt to create new user
#Now This is where the problem is
if name is None:
user = User.objects.create(username=username, email=email, password=password, year=year, branch=branch)
user.save()
else:
return render(request, "events/register.html", {
"message": "email already taken.",
"form": registerForm()
})
login(request, user)
return HttpResponseRedirect(reverse("events:index"))
else:
ctx = { "form": registerForm() }
return render(request, "events/register.html", ctx)
因此,当提交表单时,我首先检查具有输入用户名的对象是否已经存在,如果确实存在,则返回带有消息的表单(已发送电子邮件)。但是每次我尝试创建新用户时,都会返回此消息,并且我无法创建用户对象。这里出了什么问题?
解决方案
@musical_ant - 首先,你的观点非常臃肿,有很多逻辑。视图中有很多业务逻辑正在进行,它们应该提供一个简单的功能 - “注册用户”。有什么可以改进的——
密码确认匹配应在客户端完成。当使用一些简单的客户端 Js 可以轻松完成时,为什么要在后端进行如此简单的操作?
您通过访问请求有效负载和表单中的一些数据来获取一些数据。这是为什么?如果您正在渲染某种 Django 表单或 ModelForm,为什么不使用 clean_data 来获取所有值。或者如果你想通过 request.POST 因为一些 ajax 调用然后使用它......你为什么混合所有这些?
if form.is_valid(): branch = form.cleaned_data['branch']
这条线对我来说毫无意义。如果表单有效,您将提取一个值。理想情况下,如果一个表单是有效的,我们称之为表单。节省()。如果它无效,我们检查 form.errors() 3。
name = User.objects.get(email=email)
我的问题是你正在检查用户表中是否存在电子邮件,如果用户输入的用户名也存在于用户表中,如果我没有错,用户名应该是唯一的。如果用户名已经存在,那么这一行不会抛出错误
user = User.objects.create(username=username, email=email, password=password,year=year, branch=branch)
user.save()
推荐阅读
- reactjs - 在 React useEffect 钩子中设置钩子状态
- python - x轴中yyyy-mm形式的日期,用于线图pandas python
- c# - 如何通过我们的 C# Web 应用程序保持 AWS Auth0 身份验证中保存的电子邮件与 SQL Server 中的联系人表之间的完整性?
- unit-testing - 如何处理 Jmeter 自动化工具中的弹出窗口?
- angular - 如何使用引导程序将详细信息行紧邻 angular8 中的编辑单击行
- javascript - 如何从节点 js 的一列中获取所有值
- git - 对 Github 存储库的本地编辑
- mysql - WHERE AND OR 获取检查项目的问题
- android - 如何从另一个广播接收器发送接收器?
- filter - MDX - 如何“总结”过滤的结果集