Django 为用户信号创建配置文件
Django create profile for user signal
我正在尝试使用信号为用户帐户创建配置文件,但在编写代码后根本没有创建
Django 3.0.5
users/models.py
from django.db import models
from django.contrib.auth.models import User
from PIL import Image
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
profile_image = models.ImageField(default='default.jpg', upload_to='profile_pics')
def __str__(self):
return f'{self.user.username} Profile'
def save(self):
super().save()
img = Image.open(self.profile_image.path)
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.profile_image.path)
users/signals.py
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Profile
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
users/apps.py
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'
def ready(self):
import users.signals
我检查了互联网上的所有选项,但无法完成这项工作,有人可以帮忙吗,也许我的代码中遗漏了一些东西
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users',
'courses',
'crispy_forms',
]
我可以在 apps.py 中看到此消息:
未使用的导入语句'import users.signals'
并在 signals.py 中:
参数'sender'值未使用
未使用参数“**kwargs”值
使用 PyCharm 专业
替换
INSTALLED_APPS = [
...
'users',
...
]
为了
INSTALLED_APPS = [
...
'users.apps.UsersConfig',
...
]
如果您没有指定应用程序配置的路径 class,Django 将使用文档 https://docs.djangoproject.com/en/3.0/ref/applications/ 中提到的基础路径。因此,您的配置未被使用,这导致信号文件在应用程序注册期间未被导入,因此信号未被注册。
您可以将 app's config
添加到两个文件中的任何一个。
- 在您的
settings.py
文件的 INSTALLED_APPS
中,如上所述。
或者,
- 在你相关的
app
的 __init__.py
文件中,像这样(在这个例子中,相关的应用程序是 users
):
default_app_config = 'users.apps.UsersConfig'
我正在尝试使用信号为用户帐户创建配置文件,但在编写代码后根本没有创建
Django 3.0.5
users/models.py
from django.db import models
from django.contrib.auth.models import User
from PIL import Image
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
profile_image = models.ImageField(default='default.jpg', upload_to='profile_pics')
def __str__(self):
return f'{self.user.username} Profile'
def save(self):
super().save()
img = Image.open(self.profile_image.path)
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.profile_image.path)
users/signals.py
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Profile
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
users/apps.py
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'
def ready(self):
import users.signals
我检查了互联网上的所有选项,但无法完成这项工作,有人可以帮忙吗,也许我的代码中遗漏了一些东西
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users',
'courses',
'crispy_forms',
]
我可以在 apps.py 中看到此消息:
未使用的导入语句'import users.signals'
并在 signals.py 中: 参数'sender'值未使用
未使用参数“**kwargs”值
使用 PyCharm 专业
替换
INSTALLED_APPS = [
...
'users',
...
]
为了
INSTALLED_APPS = [
...
'users.apps.UsersConfig',
...
]
如果您没有指定应用程序配置的路径 class,Django 将使用文档 https://docs.djangoproject.com/en/3.0/ref/applications/ 中提到的基础路径。因此,您的配置未被使用,这导致信号文件在应用程序注册期间未被导入,因此信号未被注册。
您可以将 app's config
添加到两个文件中的任何一个。
- 在您的
settings.py
文件的INSTALLED_APPS
中,如上所述。
或者,
- 在你相关的
app
的__init__.py
文件中,像这样(在这个例子中,相关的应用程序是users
):default_app_config = 'users.apps.UsersConfig'