我目前正在开展一个小项目,只是为了练习和学习Django。我决定首先从创建该术语的广泛含义的用户身份验证开始。我在登记问题上遇到了困难。我不知道我应该将set_password方法作为第一个位置参数提供什么,以及保存方法。我需要自我论证,当我尝试输入' request' 时,我收到以下错误:
/ register / super(type,obj)中的TypeError:obj必须是类型
的实例或子类型
这是我使用的注册视图:
def register(request):
if request.method == 'GET':
form = UserCreateForm()
return render(request, 'registration/register.html', {'form': form})
if request.method == 'POST':
form = UserCreateForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
username = cd['username']
email = cd['email']
password1 = cd['password1']
password2 = cd['password2']
user = User
user.username = username
user.email = email
if password1 == password2:
user.set_password(request, password1)
user.save(request)
# redirect to success page
else:
# return error
else:
# return error
这是我的表格代码:
class UserCreateForm(forms.Form):
email = forms.EmailField(required=True)
username = forms.CharField(required=True)
password1 = forms.CharField(max_length=32, widget=forms.PasswordInput)
password2 = forms.CharField(max_length=32, widget=forms.PasswordInput)
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
如果您能帮我解决这个问题,或者可以通过其他方式注册用户,我将非常感激。
答案 0 :(得分:2)
您没有调用User类来实例化它。
user = User()
答案 1 :(得分:1)
您只需使用create_user
方法:
...
if form.is_valid():
cd = form.cleaned_data
if cd['password1'] == cd['password2']:
User.objects.create_user(
cd['username'],
cd['email'],
cd['password1'],
)
# Redirect to success page
...
答案 2 :(得分:0)
我认为你需要阅读更多关于python类的内容。 你没有为self传递一个参数 - 它只是python类方法的符号,self代表一个实例,当调用一个实例方法时,你传递跳过self的所有其他参数。 我不确定它是否修复了所有内容,但我在代码中看到的错误是: - 实例化类的正确方法:user = User()(你这样做的方法就是获得对类的引用);您还可以在实例化时将用户名和电子邮件作为参数传递, - 调用用户方法的正确方法是:user.set_password(password)和user.save()