Привязка данных к учетной записи пользователя
Я пишу форму регистрации для моего сайта на django. В основном я хочу, чтобы они нажали кнопку submit и создали учетную запись. Я написал код, который создает лицензионный ключ, когда они нажимают кнопку, но я не знаю, как привязать его к их учетной записи. Есть идеи?
from django.shortcuts import render, redirect
from django.contrib.auth import login
from .forms import SignupForm
from Functions.average_getter_shortened import baseline
from Functions.today_checker import today_getter
from Functions.license_key import license_getter
def signup(request):
if request.method == 'POST':
form = SignupForm(request.POST)
if form.is_valid():
user = form.save()
try:
license_key = license_getter(access_key='access_key')
except:
license_key = 'Key'
login(request, user)
return render(request, r'registration\license_key.html', {'license_key' : license_key})
else:
form = SignupForm()
return render(request, r'registration\signup.html', {'form': form})
Я попытался реализовать user.save() после оператора except, но тогда сайт не перенаправлялся на страницу license_key
Существует множество примеров, но я сделал вот что. Я создал модель «Профиль», а затем привязал ее к записи пользователя. Это избавляет меня от необходимости работать с записью пользователя и в то же время позволяет хранить/отслеживать все, что я хочу, привязываясь к учетной записи пользователя. Когда пользователь создается, он автоматически генерирует запись профиля с настройками по умолчанию... и автоматически предоставляет доступ к группе. Мне нужно доработать способ идентификации группы лучше, чем использование PK, но пока это работает достаточно хорошо. Хотя это может не решить конкретно вашу проблему, я думаю, что структура/процессы могут быть легко адаптированы для выполнения того, что вы хотите сделать.
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
discipline_assessed = models.BooleanField(default=False, verbose_name='Assessed?')
allow_skills = models.BooleanField(default=False, verbose_name='Allow Access To Skills Matrix Tool?')
def __str__(self):
return self.user.username
class Meta:
ordering = ['user',]
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
try:
if created:
Profile.objects.create(user=instance)
instance.groups.add(Group.objects.get(id=1))
instance.save()
except Exception as err:
print('Error creating user profile!')
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
Я просто использовал обычную модель пользователя и сохранил в ней лицензионный ключ
from django.shortcuts import render, redirect
from django.contrib.auth import login
from .forms import SignupForm
from Functions.average_getter_shortened import baseline
from Functions.today_checker import today_getter
from Functions.license_key import license_getter
from accounts.models import CustomUser
def signup(request):
if request.method == 'POST':
form = SignupForm(request.POST)
if form.is_valid():
user = form.save()
try:
license_key = license_getter(access_key='access_key')
except:
license_key = 'Key'
user.license_key = license_key
user.save()
login(request, user)
return render(request, r'registration\license_key.html', {'license_key' : license_key})
else:
form = SignupForm()
return render(request, r'registration\signup.html', {'form': form})