Django之登录权限系统

本文参考链接django之auth模块(用户认证) - chchcharlie、 - 博客园 (cnblogs.com)

执行完迁移命令,会自动生成admin表,迁移命令如下:

python manage.py makemigrations

python manage.py migrate

 相关模块

from django.contrib import auth  # 导入auth模块,用于鉴权
from django.contrib.auth.models import User  # 导入auth_user表对象,用于创建用户
from django.contrib.auth.decorators import login_required  # 校验用户是否登陆的装饰器

 1)注册创建用户

User.objects.create(username=username, password=password)  # 创建普通用户,密码不加密(不推荐使用)
User.objects.create_user(username=username, password=password)  # 创建普通用户,密码加密(推荐使用)
User.objects.create_superuser(username=username, password=password, email='123@qq.com')  # 创建超级用户,但是必须填写邮箱事项,要不报错

 举例 用户注册代码

def register_action(request):
    u_name = request.GET['username']
    p_word = request.GET['password']
    # 开始 联通django用户表
    from django.contrib.auth.models import User
    try:
        user = User.objects.create_user(username=u_name,password=p_word)
        user.save()
        return HttpResponse('注册成功!')
    except:
        return HttpResponse('注册失败~用户名好像已经存在了~')

2)登录验证用户

auth.authenticate(request, username=username, password=password) # 用户名密码正确返回的是用户对象,错误返回None

 auth.login(request, user_obj) 

# 只要执行了此代码,之后在任意可以获取到request对象的地方,都可以通过request.user获取到当前登录的用户对象

 request.user.is_authenticated() # 判断是否登陆 request.user # 登陆用户对象

举例用户登录代码

def login_action(request):
    u_name = request.GET['username']
    p_word = request.GET['password']
    # 开始 联通 django 用户库,查看用户名密码是否正确
    from django.contrib import auth
    user = auth.authenticate(username=u_name,password=p_word)
    if user is not  None:
        # 进行正确的动作
        auth.login(request, user)  # 不写这个加了@login_required,就登录不了了,也添加了session
        request.session['user'] = u_name  # 这个是设置session,上面已经添加了,这个没有用
        return HttpResponse('成功')
    else:
        # 返回前端告诉前端用户名/密码不对
        return HttpResponse('失败')

 3)修改密码

# 先校验旧密码是否正确
request.user.check_password(old_password)  # 返回的是布尔值
# 修改密码
request.user.set_password(new_password)
request.user.save()  # 一定要保存

 4)注销登录

auth.logout(request)

举例用户注销

# 注销
def logout(request):
    from django.contrib import auth
    auth.logout(request)
    return HttpResponseRedirect('/login/')

 5)校验用户是否登陆,未登录情况下自动跳转到自定义的登录界面

@login_required
def welcome(request):
    print('进来了')
    # return HttpResponse('欢迎来到主页')
    return render(request,'welcome.html')
path('accounts/login/', login),  # 未注册重定向

使用auth模块写一个注册、登陆、修改密码、注销登陆功能 

from django.contrib import auth  # 导入auth模块
from django.contrib.auth.models import User  # 导入auth_user表对象
from django.contrib.auth.decorators import login_required  # 校验用户是否登陆的装饰器


# 注册功能
def register(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        User.objects.create_user(username=username, password=password) 
        return HttpResponse('注册成功!')
 
     return render(request, 'register.html')

# 登录功能
def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 数据库校验用户名和密码是否正确
        user_obj = auth.authenticate(request, username=username, password=password)
        # print(res)  # 用户名密码正确返回的是用户对象,错误返回None
        if user_obj:
            # 保存用户登录状态
            auth.login(request, user_obj)
            return HttpResponse('登陆成功!')
    return render(request, 'login.html')


# 登陆之后可以查看的页面
@login_required
def get_user(request):
    print(request.user)
    print(request.user.is_authenticated)
    return HttpResponse('get_user页面')


# 登陆之后可以查看的页面
@login_required
def login_after01(request):
    return HttpResponse('我是login_after01页面')


# 登陆之后可以查看的页面
@login_required
def login_after02(request):
    return HttpResponse('我是login_after02页面')


# 登陆之后可以查看的页面
@login_required
def login_after03(request):
    return HttpResponse('我是login_after03页面')


# 修改密码功能
@login_required
def set_password(request):
    if request.method == 'POST':
        old_password = request.POST.get('old_password')
        new_password = request.POST.get('new_password')
        # 先校验旧密码是否正确
        is_right = request.user.check_password(old_password)  # 返回的是布尔值
        # 再修改密码
        if is_right:
            request.user.set_password(new_password)
            request.user.save()  # 一定要保存
    return render(request, 'set_password.html')


# 注销功能
@login_required
def logout(request):
    auth.logout(request)
    return HttpResponse('注销成功')

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一种流行的开源Web应用程序框架,它提供了一套强大的权限管理系统,用于管理和控制用户在应用程序中的访问权限Django权限管理系统基于角色和组的概念。角色是一组权限的集合,而组是一组用户的集合。通常情况下,我们会将用户分配到不同的组中,并为每个组分配相应的角色和权限。这样,用户在组内就具备了相应的角色和权限。 通过Django权限管理系统,我们可以很轻松地创建、修改和删除用户组,并为组分配相应的角色和权限。我们还可以通过在视图函数或类中使用Django提供的装饰器或Mixin,来限制用户对特定视图或页面的访问权限。 在开发过程中,我们可以使用Django提供的管理界面来管理角色、组和权限。管理员可以通过添加、删除和修改权限,来控制用户的访问权限。我们还可以使用Django提供的模型级别权限控制,为不同的用户组提供不同的数据操作权限,从而更加细粒度地控制用户的数据访问权限。 总结来说,Django权限管理系统是一个强大而灵活的工具,可以帮助我们轻松地管理和控制用户的权限。不仅可以实现基本的用户认证和授权功能,还可以实现更高级的权限控制,满足不同应用场景下的需求。无论是小型网站还是大型企业级应用,都可以借助Django权限管理系统来提高安全性和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值