我有帶有身份驗證和電子郵件驗證的 django web 應用程式。我有兩種身份驗證選項。一種是使用Customer或Employee進行身份驗證。我必須User(AbstractUser)將它們都連接起來。
模型.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
is_customer = models.BooleanField(default=False)
is_employee = models.BooleanField(default=False)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
signup_confirmation = models.BooleanField(default=False)
class Customer(models.Model):
user = models.OneToOneField(User, on_delete = models.CASCADE, primary_key = True)
phone_number = models.CharField(max_length=20)
location = models.CharField(max_length=20)
class Employee(models.Model):
user = models.OneToOneField(User, on_delete = models.CASCADE, primary_key = True)
phone_number = models.CharField(max_length=20)
designation = models.CharField(max_length=20)
意見
...employee_register...
class customer_register(CreateView):
model = User
form_class = CustomerSignUpForm
template_name = '../templates/customer_register.html'
def form_valid(self, form):
user = form.save()
# current_site = get_current_site(request)
current_site = '127.0.0.1:8000'
subject = 'Please Activate Your Account'
message = render_to_string('activation_request.html', {
'user': user,
'domain': current_site,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user),
})
send_mail(
subject,
message,
'[email protected]',
['[email protected]'],
fail_silently=False,
)
# login(self.request, user)
return redirect('/')
def activate(request, uidb64, token):
try:
uid = force_str(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
except (TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
user.is_active = True
user.user.signup_confirmation = True
user.save()
login(request, user)
return redirect('index')
else:
return render(request, 'activation_invalid.html')
在我看來,首先我有在我的表單中按下提交按鈕時觸發的類。然后發送帶有觸發激活功能的 url 鏈接的電子郵件。
激活請求.html
{% autoescape off %}
Hi {{ user.username }},
Please click the following link to confirm your registration:
http://{{ domain }}{% url 'activate' uidb64=uid token=token %}
{% endautoescape %}
網址
...
path('customer_register/',views.customer_register.as_view(), name='customer_register'),
path('activate/<slug:uidb64>/<slug:token>/', views.activate, name='activate'),
在我的激活功能中,我想BooleanField在我的客戶模型中設定為 true,user.user.signup_confirmation = True但它不起作用。
我收到一個錯誤:
AttributeError:“用戶”物件沒有屬性“用戶”。
uj5u.com熱心網友回復:
user 物件沒有名為 user 的屬性,因為您尚未分配該屬性。
解決方案 :
在激活視圖中寫入:
user.signup_confirmation = True
代替 :
user.user.signup_confirmation = True
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/506283.html
標籤:django 验证 django模型 电子邮件验证 激活
