标签: django-users

如何使用django rest框架和自定义用户模型创建新用户

我有一个自定义用户模型,我使用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-users django-rest-framework

15
推荐指数
1
解决办法
1万
查看次数

设置django密码重置令牌的到期时间

我正在使用Django的内置密码重置功能,该功能通过电子邮件向用户发送密码重置链接.Django中是否有一个选项可以设置链接的到期时间,假设链接失效6小时后,用户必须再次请求密码恢复.

python django django-users

14
推荐指数
2
解决办法
7645
查看次数

在Django中获取当前用户登录信号

我只是在Django中使用管理站点.我有2个Django信号(pre_save和post_save).我想拥有当前用户的用户名.我该怎么办?它似乎不能发送请求或我不理解它.

谢谢

django django-admin django-users

13
推荐指数
2
解决办法
7443
查看次数

Django - 不同类型的用户配置文件

我有一个Django应用程序,它允许不同类型的用户:公司,管理员,外部人员等.当然,使用默认的身份验证系统和组,所有这些都很容易管理.

我的问题是属于不同群体的用户将拥有不同的相关信息 - 例如,公司需要提供一些对私人用户没有意义的商业信息.因此,我需要附加不同类型的配置文件,具体取决于组.(在我的应用程序组中是互斥的.)

不幸的是,Django只允许将单个模型作为配置文件附加,并且声明该模型settings.AUTH_PROFILE_MODULE.在内部,由User.get_profile()方法检索,该方法基本上只读取该值并执行一些检查,例如模型实际存在.

我正在考虑子类化User和重写get_profile()方法,以便根据组返回不同的模型.

是否有更简单/更清洁的方式来管理不同类型的配置文件?

考虑到用户配置文件的引入完全是为了避免必须使用子类,我提出的建议似乎有点破解.

django django-models django-users

13
推荐指数
1
解决办法
3124
查看次数

如何限制登录Django中同一帐户的并发用户数

我的网站是一个用Django编写的数字市场网站.

默认情况下,网站上的数字内容(文本,图像,视频)处于"锁定"状态.只有购买这些内容的用户才能查看.

有一个故事,某个用户(谁购买了内容)免费向许多人赠送用户名/密码(例如,Facebook群组中有1000多人).然后,这1,000名用户可以使用该单一用户名/密码登录,并查看"锁定"的数字内容而无需支付一分钱.

是否可以限制同一帐户的并发登录次数?

我发现这个包裹:

https://github.com/pcraston/django-preventconcurrentlogins

但是当有人使用相同的用户名/密码登录时,它的作用是记录以前的用户.这无济于事,因为每个用户每次只需输入用户名/密码即可访问"锁定"内容.

django django-admin django-authentication django-sessions django-users

12
推荐指数
1
解决办法
2313
查看次数

如何制作django消息StackOverflow风格?

我想使用Django的Messages模块,但是,我希望我的消息能够持续到用户单击消息旁边的X,而不是在用户重新加载页面时消息消失.

我遇到两个问题:如何使消息的上下文处理器在访问后删除消息?一旦用户点击"删除"按钮(调用ajax调用),我以后如何显式删除数据库中的消息?

谢谢!

python django ajax django-users

11
推荐指数
2
解决办法
4725
查看次数

在Django 1.5/1.6中设置两种不同类型的用户

请注意 - 这是关于此主题的原始问题的更新版本,但值得再次询问Django如何处理用户和身份验证.

我正在一个网站上有两个非常不同类型的用户-我们称它们CustomersStore 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用一个有些额外的字段级OneToOneUser,再附加CustomerStoreOwner那名课OneToOneUserProfile.这不是很好.

鉴于Django 1.5/1.6的变化,我试图想出最好的结构方法.现在,我有以下内容:

class CustomerUser(AbstractBaseUser):
    ...

class StoreOwnerUser(AbstractBaseUser):
    ...
Run Code Online (Sandbox Code Playgroud)

但是因为有两种类型的用户,我不能AUTH_USER_MODEL只设置其中一种.

构造这个的最佳方法是什么,以便我可以有两个不同类型的用户使用不同的字段,而不会在用户身份验证,用户创建或管理员方面造成任何问题?

另外,我怎样才能从登录单独告诉该用户是a CustomerUser还是 …

python django django-models django-users django-1.6

11
推荐指数
1
解决办法
6470
查看次数

AbstractUser Django完整的例子

我是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)

django django-models django-users python-2.7 django-1.5

10
推荐指数
2
解决办法
1万
查看次数

django自定义用户模型密码未被哈希处理

我有自己的自定义用户模型,也有自己的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)

django hash django-admin django-permissions django-users

10
推荐指数
2
解决办法
8013
查看次数

Django - admin中的UserProfile m2m字段 - 错误

我的模特:

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 django-models django-admin django-users

9
推荐指数
1
解决办法
2042
查看次数