首页 > 解决方案 > 如何在 django 2.0 中设置注册和信号

问题描述

有人可以帮我弄清楚我在尝试设置身份验证和信号以与在 django 2.0 中创建的模型一起工作时做错了什么。

模型.py

from django.db import models
from django.conf import settings.AUTH_USER_MODEL
from django.db.models.signals import post_save
from django.dispatch import receiver

class Profile(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    bio = models.TextField(foo)
    location = models.CharField(foo)


    # Override save method
    # Run after the method is saved to add signal functionality below
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
    else:
        instance.profile.save()

表格.py

from django import forms
from django.contrib.auth import get_user_model
from django.forms import ModelForm
from .models import Profile

Profile = get_user_model()

class UserRegisterForm(forms.ModelForm):
    email = forms.EmailField(foo)
    first_name = forms.CharField(foo)
    last_name = forms.CharField(foo)
    password = forms.CharField(foo)
    password2 = forms.CharField(foo)

    class Meta:
        model = Profile
        fields = [
            'username',
            'first_name',
            'last_name',
            'email',
            'password1',
            'password2'
        ]

视图.py

from django.shortcuts import render, redirect
from django.contrib.auth import get_user_model
from .forms import UserRegisterForm
from .models import Profile
from django.conf import settings

def register(request):
    next = request.GET.get('next')
    form = UserRegisterForm(request.POST or None)
    if form.is_valid():
        user = form.save(commit=False)
        password = form.cleaned_data.get('password')
        user.set_password(password)
        user.save()
        new_user = authenticate(username=user.username, password=password)
        login(request, new_user)
        if next:
            return redirect(next)
        return redirect('accounts:login')

    context = {
        'form': form,
    }
    return render(request, "accounts/register.html", context)

Foo = 只是一个占位符

上面的代码创建了用户,但没有创建与之关联的配置文件。

任何帮助将非常感激。

标签: djangopython-3.xauthenticationdjango-registrationdjango-2.0

解决方案


这是我发现的来自 youtube 的视频,它以最好的方式(我认为)解释了如何使用他们的个人资料创建用户: Youtube 教程,希望它对您有所帮助。


推荐阅读