我使用Django AbstractUser
创建了一个自定义用户。我真的不知道如何反映用户注册,登录和更新所添加的字段。下面是我尝试过的:
models.py
class CustomUser(AbstractUser):
state = models.CharField(choices=States,default ='abia',max_length=50 )
city = models.CharField(max_length=50)
local_government = models.CharField(max_length=50)
phone_number = models.CharField(max_length=50,blank= True)
picture = models.ImageField(upload_to='user/photos',blank=False,null=False,validators=
[clean_image])
forms.py
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = CustomUser
fields = UserCreationForm.Meta.fields + ('state','city','local_government','phone_number','picture',)
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = CustomUser
fields = UserCreationForm.Meta.fields + ('state',)
admin.py
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
form = CustomUserChangeForm
model = CustomUser
list_display = ['id','first_name','last_name','email','subscription_plan','state','picture']
views.py(用于注册)
def register (request):
if request.method == 'POST':
firstname= request.POST['firstname']
lastname= request.POST['lastname']
state= request.POST['state']
city= request.POST['city']
email= request.POST['email']
username= request.POST['username']
password= request.POST['password']
password2= request.POST['password2']
if password == password2:
if User.objects.filter(username=username).exists():
messages.error (request,'That username is taken')
return redirect('register')
else:
if User.objects.filter(email=email).exists():
messages.error (request,'That email is being used')
return redirect('register')
else:
user= User.objects.create(username=username,first_name=firstname,last_name=lastname,email=email,password = make_password(password),state=state,city=city)
user.save()
messages.success (request,'You are now registered and can login')
return redirect('login')
else:
messages.error (request,'passwords do not match')
return redirect('register')
else:
return render (request,'accounts/signup.html')
查看登录
def login (request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(usernam=username,password=password)
if user is not None:
auth.login(request,user)
messages.success(request,'You are now logged in')
return redirect ('dashboard')
else:
messages.error(request,'Invalid Credentials')
return redirect ('login')
else:
return render (request,'accounts/signin.html')
查看更新
class UpdateUser(UpdateView):
model= User
template_name= 'profile/profile-edit.html'
fields = ['first_name','picture']
context_object_name= 'profile'
当我尝试使用以上代码查看时,它不起作用。我相信我做错了,将不胜感激。