我想使用自定义寄存器模型注册用户,但我一直收到以下错误:
重复的键值违反了唯一约束“auth_user_username_key”详细信息:键(username)=(无)已存在
我如何修复这个错误。
这是我到目前为止创建的代码:
在 urls.py 我为各个页面创建URL配置。
from django.conf.urls import url
from django.contrib.auth.views import login
from . import views
urlpatterns = [
url(r'^$', views.nest, name = 'nest'),
url(r'^login/$', login, {'template_name' : 'Identities/login.html'}, name = 'login'),
url(r'^register/$', views.register, name = 'register'),
]
形式。py我创建自定义注册表单。
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
# Create custom user registration
class CreateAccountForm(UserCreationForm):
email = forms.EmailField(required = True)
class Meta:
model = User
fields = (
'first_name',
'last_name',
'email',
'password1',
'password2'
)
def save(self, commit = True):
user = super(CreateAccountForm, self).save(commit = False)
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
views.py我创建了寄存器视图函数。
from django.shortcuts import render, redirect
from Identities.forms import CreateAccountForm
# Create your views here.
def nest(request):
return render(request, 'Identities/nest.html')
def register(request):
if request.method == 'POST':
form = CreateAccountForm(request.POST)
if form.is_valid():
form.save()
else:
return redirect(reverse('Identities:logout'))
else:
form = CreateAccountForm()
var = {'form' : form}
return render(request, 'Identities/create_account.html', var)
你真的应该试试下面的东西。在这里,我已将用户名包含在表单字段中。由于用户名是唯一的,因此应将其包含在表单字段中。在保存方法中,self.cleaned_data。get(“username”,None)
如果请求中没有发布任何内容,则会将None带到username字段。如果没有给定值,则db期望为None,但如果不在save方法中指定它,它将接收空字符串,这将导致重复键错误。请注意,Django不会将空值存储为None,而是使用空字符串。
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
# Create custom user registration
class CreateAccountForm(UserCreationForm):
email = forms.EmailField(required = True)
class Meta:
model = User
fields = (
'username',
'first_name',
'last_name',
'email',
'password1',
'password2'
)
def save(self, commit = True):
user = super(CreateAccountForm, self).save(commit = False)
user.username = self.cleaned_data.get("username", None)
user.first_name = self.cleaned_data.get("first_name", None)
user.last_name = self.cleaned_data.get("last_name", None)
user.email = self.cleaned_data.get("email", None)
if commit:
user.save()
return user
您需要在表单中包含用户名
。因为用户名是唯一字段,不能在表单中排除。如果您在表单中将其排除,则需要通过为每个用户生成唯一用户名来处理,这有点繁琐。
class CreateAccountForm(UserCreationForm):
email = forms.EmailField(required = True)
class Meta:
model = User
fields = (
'username'
'first_name',
'last_name',
'email',
'password1',
'password2'
)
. . . . . .
. . . . . .
用户:用户名=>{密码:哈希,年龄:45} 用户:0=>{USERNAME:USERNAME,password:HASH,年龄:45} 请注意,我希望通过名称查找用户,因此需要第二组键值来将用户名与ID相关联。 考虑到每个用户名都是唯一的,并且必须是字母数字的,是否有任何特殊的原因来说明使用ID系统可能是有益的。 附言。由于Redis处理哈希的方式,我实际上不确定这两种方法之间的内存差异,所以关于
问题内容: 我有一个字段,例如,在表中应该是唯一的。 使用Spring / Hibernate验证进行验证的最佳方法是什么? 问题答案: 一种可能的解决方案是创建自定义约束(和相应的验证器)。并要查找数据库中的现有记录,请提供(或Hibernate)to 的实例。 EntityManagerAwareValidator ConstraintValidatorFactoryImpl 唯一键 Uniq
数据供应商为使用其SFTP服务器请求了公共SSH密钥。他们向我们提供了: 用户名 密码 主机名 端口 我正在尝试使用私钥和用户名/密码在php中使用流包装器。我的代码如下: 有人有什么想法吗? 我对使用ssh2函数的想法持开放态度,但我强烈希望使用文件系统和流函数。
这是获取用户帐户及其Api密钥的endpoint:https://dev.openclinica.com/apidoc/#api-User_Account-getAccountByUserName使用带有postman的follingendpoint 后http://89.221.253.174:8080/OpenClinica/pages/accounts/login?username=pran
我正在学习ssl通信的基础知识,尤其是AES加密。我读了OpenSSL代码,看到了一个名为< code>userkey的指针。 在文件"aes_core. c"中 > 从何而来?它是如何生成的? 我想知道不同版本AES的的实际大小。 256 位版本为 256 / 8 = 32,192 为 24,128 为 16?我有点迷茫。 如果长度是可变的,那么我应该如何为那些符合长度要求的输入创建一个安全的输
我试图使用javascript创建ECDSA算法的密钥对,签名消息,然后在服务器端验证它(使用Java)。 示例javascript代码: 例如: 我做错了什么?