Django user拓展

通过继承AbstractUser来拓展user表的字段

from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
    isProject = models.BooleanField(verbose_name="项目权限", db_column='is_project', default=0)
    
    class Meta:
        db_table = 'user'
        verbose_name = "用户"
        verbose_name_plural = '用户管理'
class UserDeserializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'
    
    def create(self, validated_data):
        register_info = {
            'username': validated_data.get('username'),
            'password': validated_data.get('password'),
            'isProject': validated_data.get('isProject', 0),
            'email':validated_data.get('email')
        }
        user = User.objects.create_user(**register_info)
        user.save()
        return user

如果想要通过反序列化来创建用户,那么一定要重写create()方法,不然创建的密码是明文的,是无法登录成功的。

使用了user拓展之后,django的后台会无法看到原来的用户添加功能

 需要在admin.py文件中重新注册

admin.site.register(User)

然后又会出现新的问题,如果使用后台去添加用户,用户的密码是明文的。

from django.contrib.auth.admin import UserAdmin

admin.site.register(User, UserAdmin)

通过这样注册可以让添加用户的密码是加密的,但是修改用户时,拓展的字段看不见了。

from django.contrib import admin
from .models import User
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext_lazy


class UserProfileAdmin(UserAdmin):
    list_display = ('username', 'last_login', 'is_superuser', 'is_staff', 'is_active', 'date_joined')
    fieldsets = (
        (None, {'fields': ('username', 'password', 'first_name', 'last_name', 'email')}),
        
        (gettext_lazy('User Information'), {'fields': ('isProject',)}),
        
        (gettext_lazy('Permissions'), {'fields': ('is_superuser', 'is_staff', 'is_active',
                                                  'groups', 'user_permissions')}),
        
        (gettext_lazy('Important dates'), {'fields': ('last_login', 'date_joined')}),
    )


admin.site.register(User, UserAdmin)

 通过继承UserAdmin,然后添加拓展的字段。

Django中,为了创建一个`UserSession`模型,它同时关联用户(`django.contrib.auth.models.User`)和会话(`django.contrib.sessions.models.Session`),你可以按照以下步骤操作: 首先,你需要在`models.py`文件中定义`UserSession`模型,并指定两个外键关系: ```python from django.db import models from django.contrib.auth.models import User from django.contrib.sessions.models import Session class UserSession(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) # 用户外键,当用户删除时CASCADE删除 session = models.OneToOneField(Session, on_delete=models.CASCADE) # 一对一的会话外键,同样Cascade删除 class Meta: db_table = 'your_user_session_table_name' # 可选,自定义数据库表名 ``` 这里假设你想要在`your_user_session_table_name`这个表中存储数据。 然后,在项目的`settings.py`文件里,确保`AUTH_USER_MODEL`设置为你应用中定义的用户模型(这里通常是`auth.User`),以及添加了`SESSION_ENGINE`以启用Django自带的会话系统: ```python # settings.py INSTALLED_APPS = [ # ... 'django.contrib.auth', 'django.contrib.sessions', # ... (其他应用) ] AUTH_USER_MODEL = 'your_app_name.User' # 替换为实际应用中User模型的名称 SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 使用内置数据库会话引擎 ``` 最后,别忘了运行迁移命令来创建数据库表: ```bash python manage.py makemigrations python manage.py migrate ``` 如果你需要查询或操作这个模型,可以像操作普通的Django模型一样: ```python user_session = UserSession.objects.get(user=user_id, session=session_key) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值