django创建管理员用户和普通用户

1. 创建管理员用户

python manage.py createsuperuser

2. 创建普通用户

python manage.py shell
from django.contrib.auth.models import User
user = User.objects.create_user(username='John',password='123456')
user.save()

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Django 中,可以通过自定义用户认证系统来实现管理员普通用户登录分离。 首先,需要创建一个新的用户模型,它继承自 Django 自带的 AbstractBaseUser 和 PermissionsMixin,例如: ```python from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin from django.db import models from django.utils import timezone class CustomUser(AbstractBaseUser, PermissionsMixin): email = models.EmailField(unique=True) username = models.CharField(max_length=30, unique=True) is_staff = models.BooleanField(default=False) is_active = models.BooleanField(default=True) date_joined = models.DateTimeField(default=timezone.now) USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['username'] def __str__(self): return self.email def get_full_name(self): return self.username def get_short_name(self): return self.username ``` 然后,需要创建一个自定义认证后端,它继承自 Django 自带的 ModelBackend,例如: ```python from django.contrib.auth.backends import ModelBackend from django.contrib.auth import get_user_model class CustomBackend(ModelBackend): def authenticate(self, request, email=None, password=None, **kwargs): UserModel = get_user_model() try: user = UserModel.objects.get(email=email) except UserModel.DoesNotExist: return None else: if user.check_password(password): return user return None def get_user(self, user_id): UserModel = get_user_model() try: return UserModel.objects.get(pk=user_id) except UserModel.DoesNotExist: return None ``` 在 settings.py 中设置 AUTH_USER_MODEL 和 AUTHENTICATION_BACKENDS,例如: ```python AUTH_USER_MODEL = 'myapp.CustomUser' AUTHENTICATION_BACKENDS = ['myapp.backends.CustomBackend'] ``` 最后,在视图中使用 Django 自带的 login() 和 logout() 函数进行登录和退出,例如: ```python from django.contrib.auth import authenticate, login, logout from django.shortcuts import render, redirect def login_view(request): if request.method == 'POST': email = request.POST['email'] password = request.POST['password'] user = authenticate(request, email=email, password=password) if user is not None: if user.is_staff: login(request, user) return redirect('admin:index') else: login(request, user) return redirect('user_home') else: return render(request, 'login.html', {'error': 'Invalid credentials'}) else: return render(request, 'login.html') def logout_view(request): logout(request) return redirect('login') ``` 在 login_view 视图中,如果用户管理员,则重定向到 Django 自带的 admin:index 页面,否则重定向到普通用户的主页。在 logout_view 视图中,使用 Django 自带的 logout() 函数退出登录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值