我有一个自定义用户模型,我使用django-rest-framework来创建API
models.py:
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(
unique=True,
max_length=254,
)
first_name = models.CharField(max_length=15)
last_name = models.CharField(max_length=15)
mobile = models.IntegerField(unique=True)
date_joined = models.DateTimeField(default=timezone.now)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
Run Code Online (Sandbox Code Playgroud)
serializers.py:
class UserSerializer(serializers.ModelSerializer):
password1 = serializers.CharField(write_only=True)
password2 = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'mobile', 'password1', 'password2')
Run Code Online (Sandbox Code Playgroud)
views.py:
@api_view(['POST'])
@permission_classes((AllowAny,))
def create_user(request):
serialized = UserSerializer(data=request.data)
if serialized.is_valid():
User.objects.create_user(
serialized.save()
)
return Response(serialized.data, status=status.HTTP_201_CREATED)
else:
return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试创建一个新用户时,我收到此错误:
得到一个
TypeError电话User.objects.create().这可能是因为序列化程序类上的可写字段不是有效参数User.objects.create().您可能需要将该字段设置为只读,或重写UserSerializer.create()方法以正确处理此字段.
这可能是因为User模型中没有password1或password2字段.但是,如何创建API以使用django-rest-framework创建新用户?
我正在使用Django的内置密码重置功能,该功能通过电子邮件向用户发送密码重置链接.Django中是否有一个选项可以设置链接的到期时间,假设链接失效6小时后,用户必须再次请求密码恢复.
我只是在Django中使用管理站点.我有2个Django信号(pre_save和post_save).我想拥有当前用户的用户名.我该怎么办?它似乎不能发送请求或我不理解它.
谢谢
我有一个Django应用程序,它允许不同类型的用户:公司,管理员,外部人员等.当然,使用默认的身份验证系统和组,所有这些都很容易管理.
我的问题是属于不同群体的用户将拥有不同的相关信息 - 例如,公司需要提供一些对私人用户没有意义的商业信息.因此,我需要附加不同类型的配置文件,具体取决于组.(在我的应用程序组中是互斥的.)
不幸的是,Django只允许将单个模型作为配置文件附加,并且声明该模型settings.AUTH_PROFILE_MODULE.在内部,由User.get_profile()方法检索,该方法基本上只读取该值并执行一些检查,例如模型实际存在.
我正在考虑子类化User和重写get_profile()方法,以便根据组返回不同的模型.
是否有更简单/更清洁的方式来管理不同类型的配置文件?
考虑到用户配置文件的引入完全是为了避免必须使用子类,我提出的建议似乎有点破解.
我的网站是一个用Django编写的数字市场网站.
默认情况下,网站上的数字内容(文本,图像,视频)处于"锁定"状态.只有购买这些内容的用户才能查看.
有一个故事,某个用户(谁购买了内容)免费向许多人赠送用户名/密码(例如,Facebook群组中有1000多人).然后,这1,000名用户可以使用该单一用户名/密码登录,并查看"锁定"的数字内容而无需支付一分钱.
是否可以限制同一帐户的并发登录次数?
我发现这个包裹:
https://github.com/pcraston/django-preventconcurrentlogins
但是当有人使用相同的用户名/密码登录时,它的作用是记录以前的用户.这无济于事,因为每个用户每次只需输入用户名/密码即可访问"锁定"内容.
django django-admin django-authentication django-sessions django-users
我想使用Django的Messages模块,但是,我希望我的消息能够持续到用户单击消息旁边的X,而不是在用户重新加载页面时消息消失.
我遇到两个问题:如何使消息的上下文处理器在访问后不删除消息?一旦用户点击"删除"按钮(调用ajax调用),我以后如何显式删除数据库中的消息?
谢谢!
请注意 - 这是关于此主题的原始问题的更新版本,但值得再次询问Django如何处理用户和身份验证.
我正在一个网站上有两个非常不同类型的用户-我们称它们Customers和Store Owners.两者都在网站上注册,但功能却截然不同. Customers只需一个个人资料,就可以在他们喜欢的商店中购物. Store Owners拥有一个帐户,但可以访问多个商店,每个商店可以有多个Store Owners.
模型的确切细节无关紧要,但这两类用户需要非常不同的字段.理想情况下,模型看起来像这样:
Customer
email (username)
password
name
address
time_zone
preferred_shipping
favorite_stores (many-to-many field)
...
Store Owner
email (username)
password
name
balance
stores_owned (many-to-many field on Stores)
stores_managed (many-to-many field on Stores)
...
Run Code Online (Sandbox Code Playgroud)
原来,当Django的有穷自定义用户的支持,我有一个UserProfile用一个有些额外的字段级OneToOne上User,再附加Customer和StoreOwner那名课OneToOne上UserProfile.这不是很好.
鉴于Django 1.5/1.6的变化,我试图想出最好的结构方法.现在,我有以下内容:
class CustomerUser(AbstractBaseUser):
...
class StoreOwnerUser(AbstractBaseUser):
...
Run Code Online (Sandbox Code Playgroud)
但是因为有两种类型的用户,我不能AUTH_USER_MODEL只设置其中一种.
构造这个的最佳方法是什么,以便我可以有两个不同类型的用户使用不同的字段,而不会在用户身份验证,用户创建或管理员方面造成任何问题?
另外,我怎样才能从登录单独告诉该用户是a CustomerUser还是 …
我是Django的新手,我已经尝试了几周,但找不到解决这个问题的方法.
我想存储其他信息,如用户手机号码,银行名称,银行帐户.并希望在用户注册时存储手机号码,并希望用户使用(手机号码和密码)或(电子邮件和密码)登录.
这是我的UserProfile模型
from django.db import models
from django.contrib.auth.models import User
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserProfile(AbstractUser):
user_mobile = models.IntegerField(max_length=10, null=True)
user_bank_name=models.CharField(max_length=100,null=True)
user_bank_account_number=models.CharField(max_length=50, null=True)
user_bank_ifsc_code = models.CharField(max_length=30,null=True)
user_byt_balance = models.IntegerField(max_length=20, null=True)
Run Code Online (Sandbox Code Playgroud)
这是我的forms.py
from django import forms
from django.contrib.auth.models import User # fill in custom user info then save it
from django.contrib.auth.forms import UserCreationForm
from models import UserProfile
from django.contrib.auth import get_user_model
class MyRegistrationForm(UserCreationForm):
email = forms.EmailField(required = True)
mobile = forms.IntegerField(required=True)
class Meta:
model = …Run Code Online (Sandbox Code Playgroud) 我有自己的自定义用户模型,也有自己的Manger.
楷模:
class MyUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=255, unique=True)
first_name = models.CharField(max_length=35)
last_name = models.CharField(max_length=35)
username = models.CharField(max_length=70, unique=True)
date_of_birth = models.DateField()
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
@property
def is_staff(self):
return self.is_admin
def get_full_name(self):
return ('%s %s') % (self.first_name, self.last_name)
def get_short_name(self):
return self.username
objects = MyUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name', 'username', 'date_of_birth']
Run Code Online (Sandbox Code Playgroud)
经理:
class MyUserManager(BaseUserManager):
def create_user(self, email, first_name, last_name, username, date_of_birth, password=None, **kwargs):
if not email:
raise ValueError('User must have an email address')
user …Run Code Online (Sandbox Code Playgroud) 我的模特:
class UserProfile(models.Model):
TYPES_CHOICES = (
(0, _(u'teacher')),
(1, _(u'student')),
)
user = models.ForeignKey(User, unique=True)
type = models.SmallIntegerField(default=0, choices=TYPES_CHOICES, db_index=True)
cities = models.ManyToManyField(City)
class City(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
在admin.py中:
admin.site.unregister(User)
class UserProfileInline(admin.StackedInline):
model = UserProfile
class UserProfileAdmin(UserAdmin):
inlines = [UserProfileInline]
admin.site.register(User, UserProfileAdmin)
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
"""Create a matching profile whenever a user object is created."""
if created:
profile, new = UserProfile.objects.get_or_create(user=instance)
Run Code Online (Sandbox Code Playgroud)
但是当我添加新用户并选择一个城市时,我得到了这个错误:/ admin/auth/user/add /中的IntegrityError(1062,"密钥'user_id'的重复条目'3'")
我的代码出了什么问题?如果我没有选择任何城市 - 用户被正确添加.某种程度上,用户被多次添加到UserProfile.
django ×10
django-users ×10
django-admin ×4
python ×3
ajax ×1
django-1.5 ×1
django-1.6 ×1
hash ×1
python-2.7 ×1