django - 如何在 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 = 只是一个占位符
上面的代码创建了用户,但没有创建与之关联的配置文件。
任何帮助将非常感激。
解决方案
这是我发现的来自 youtube 的视频,它以最好的方式(我认为)解释了如何使用他们的个人资料创建用户: Youtube 教程,希望它对您有所帮助。
推荐阅读
- php - 在子文件夹中部署 Laravel 项目
- json - Angular 2+ - 解析 json 数据并仅输出单个特定数据
- phpword - TemplateProcessor 中的 HTML 到 OOXML
- r - R:使用 while 循环更新列表对象的问题
- node.js - 如何在 Node/Express 的客户端中正确呈现服务器端错误?
- android - 在 Android 和 ios 上用 Unity 录制屏幕视频的最佳方式?
- ember.js - Ember:序列化任意哈希键名
- javascript - 编写这种排序函数的更简洁的方法
- popup - 在 ADF 中的禁用链接上显示弹出窗口
- c# - 在 DataGridView 的列中隐藏值 00:00:00 TimeSpan