day94-2 auth,layui的使用

auth模块

  • auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理。
  • auth可以和admin模块配合使用, 快速建立网站的管理系统
  • 在INSTALLED_APPS中添加'django.contrib.auth'使用该APP, auth模块默认启用。

默认使用的表是auth_user,在迁移时会自动创建这张表

auth模块操作

auth_user表记录的添加

  • 创建超级用户(不可手动添加记录,因为密码是加密的)
    • python3 manage.py createsuperser
  • 简单的auth认证(登录功能
# views.py
def auth_login(request):
    if request.method == 'GET':
        return render(request, 'auth_login.html')

    else:
        username = request.POST.get('username')
        pwd = request.POST.get('pwd')
        my_user = auth.authenticate(request, username=username, password=pwd)   # from auth_user where username=username and password = passwrod
        print(my_user, 'my_user')   # 用户名
        if my_user:
            # 之前的方式设置cookie和session
            # request.session['name'] = username
            # auth自带的方式
            auth.login(request, my_user)    # 其实也是调用了sesion,但和session的不同之处在于会产生一个user对象,并且可以在任意的视图函数中调用这个user
            return HttpResponse('ok')
        else:
            return render(request, 'auth_login.html')

# 验证方法1
def test1(request):
    print(request.user) # 返回一个用户名
    
    # 是否登陆
    if request.user.is_authenticated:
        # 业务逻辑处理函数
        return HttpResponse('ok')
    else:
        return render(request, 'auth_login.html')

# 验证方法2:装饰器
from django.contrib.auth.decorators import login_required

@login_required(login_url='/auth_login/')   # 验证失败后,去哪个页面
def test2(request):
    # 业务逻辑处理
    return HttpResponse('hello')

# 验证方法2:书写配置文件
# 在settings.py中添加
# 效果是可以在配置文件中指定auth校验登陆不合法统一跳转到某个路径
LOGIN_URL = '/login/'  # 既可以局部配置,也可以全局配置
# 那么在views中,就不用书写跳转路径了
@login_required()   
def test3(request):
    # 业务逻辑处理
    return HttpResponse('hello')
  • 用代码对auth_user表添加数据(注册功能
from django.contrib.auth.models import User
def register(request):
    if request.method  == 'GET':
        return render(request, 'register.html')
    else:
        username = request.POST.get('username')
        pwd = request.POST.get('pwd')
        
        # User.objects.create_superuser(username=username, password=pwd, email='111@qq.com')    # 创建超级用户
        User.objects.create_user(username=username, password=pwd)
    return HttpResponse('ok')   # 创建普通用户

# 这里不能只使用create,因为那样密码是明文的
  • 校验,修改密码
### 修改密码
def modify(request):
    if request.method=='GET':
        return render(request, 'modify.html')
    
    else:
        old_pwd = request.POST.get('oldpwd')
        new_pwd = request.POST.get('newpwd')

        res = request.user.check_password(old_pwd)  # 判断旧密码是否正确
        if res:
            request.user.set_password(new_pwd)  # 修改密码
            request.user.save() # 保存
            return HttpResponse('ok')
        else:
            return render(request, 'modify.html')
  • 注销
def logout(request):
    auth.logout(request)
    return HttpResponse('logout')
# 等价于删除session数据request.session.flush()

和session方式的不同之处

'''
  只要登陆成功执行了auth.login(request,user)
  之后在其他任意的视图函数中都通过request.user获取当前登陆用户对象

  当没有执行auth.login,request.user打印出来的是匿名用户。将session表数据删除即可演示改效果
  如何判断request.user用户是否通过auth.login登陆呢?                          request.user.is_authenticated

  为何执行auth.login之后,其他视图函数中就可以通过request.user拿到当前登陆对象呢?想想django的中间件中有没有一个叫auth.middleware. 的中间件,它干了件什么事,能不能推导一下?取出session去表里面查相应的数据,然后放到request.user中,点进去看一下这个中间件确实如此
'''

自定义模型表应用auth功能

扩张auth_user表

1.一对一关联(不推荐)

from django.contrib.auth.model s import User

class UserDetail(models.Models):
  phone = models.CharField(max_length=11)
  user = models.OnoToOneField(to=User)

2.使用面向对象的继承,自定义一张表

# models.py
from django.contrib.auth.models import User,AbstractUser
class UserInfo(AbstractUser):
    phone = models.CharField(max_length=32)
    
# 需要在配置文件中,指定我不再使用默认的auth_user表而是使用我自己创建的Userinfo表
# AUTH_USER_MODEL = "app名.models里面对应的模型表名"
AUTH_USER_MODEL = "app01.UserInfo"

"""
自定义认证系统默认使用的数据表之后,我们就可以像使用默认的auth_user表那样使用我们的UserInfo表了。
库里面也没有auth_user表了,原来auth表的操作方法,现在全部用自定义的表均可实现
"""

layui的使用

一个强大的前端框架

https://www.layui.com/

转载于:https://www.cnblogs.com/lucky75/p/11373414.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值