zoukankan      html  css  js  c++  java
  • auth模块

    执行数据库迁移的那两条命令时,即使我们没有建表,django是不是也会创建好多张表?我们创建之后去看一下里面的一个叫auth_user表,既然是表,那肯定应该有对应的操作改表的方法

      auth_user表记录的添加

        创建超级用户(密码是加密的)      

          createsuperuser

    针对表中的数据做用户登录功能

    from django.shortcuts import render,HttpResponse
    
    # Create your views here.
    from django.contrib import auth
    
    def auth_login(request):
        if request.method=='POST':
            username=request.POST.get('username')
            password=request.POST.get('password')
            res= auth.authenticate(request,username=username,password=password)
            print(res)  #用户密码都匹配正确返回用户名,匹配不正确返回None
            if res:
                #记录用户状态
                # 设置session
                # request.session['name']='jason'
                auth.login(request,res) #根据对象res生成相应的session
                return HttpResponse('登录成功')
    
        return render(request,'auth_login.html')
    def auth_index(request):
        print(request.user.is_authenticated())  #判断当前用户是否登录,登录返回True,没有登录返回False
    
    
        return HttpResponse('登录后才可以查看index页面')
    
    # 退出登录,清除本地和服务端的session
    def auth_logout(request):
        auth.logout(request)    #清除session,相当于request .session.flush()
        return HttpResponse('退出成功')
    # 用户注册
    #导入用户表
    from django.contrib.auth.models import User
    def auth_register(request):
        if request.method=='POST':
            username=request.POST.get('username')
            password=request.POST.get('password')
            user_obj= auth.authenticate(request,username=username)
            if user_obj:
                return HttpResponse('当前用户:%s已经存在')%username
            # 使用create创建用户不会加密,create_user创建普通用户会加密;create_superuser创建超级用户,密码会加密
            User.objects.create_user(username=username,password=password)
    
        return render(request, 'auth_register.html')
    
    # 修改密码,输入旧密码,输入新密码
    def auth_password(request):
        if request.method=='POST':
            print(request.user) #显示当前登录用户名
            print(request.user.password)    #显示当前登录用户名的加密密码
            password=request.POST.get('password')
            re_password=request.POST.get('re_password')
    
            is_res = request.user.check_password(password)
            print(is_res)
            if is_res:
                request.user.set_password(re_password)
                # 保存写入数据库中
                request.user.save()
                return HttpResponse('密码修改成功')
            return HttpResponse('原密码输入不正确')
        return render(request,'auth_password.html')
    # auth_login.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
        <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
        <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
    <form action="" method="post">
        {% csrf_token %}
        <p>username:<input type="text" name="username"></p>
        <p>password:<input type="password" name="password"></p>
        <input type="submit">
    </form>
    </body>
    </html>
    # auth_password.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>修改密码</title>
        <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
        <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
        <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
    <form action="" method="post">
        {% csrf_token %}
        <p>原密码:<input type="password" name="password"></p>
        <p>新密码:<input type="password" name="re_password"></p>
        <input type="submit">
    </form>
    </body>
    </html>
    # auth_register.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>用户注册</title>
        <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
        <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
        <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
    <h1>用户注册</h1>
    <form action="" method="post">
        {% csrf_token %}
        <p>username:<input type="text" name="username"></p>
        <p>password:<input type="password" name="password"></p>
        <input type="submit">
    </form>
    </body>
    </html>

    获取用户点击访问指定路径之前的路径

    # 加载模块
    from django.contrib.auth.decorators import login_required
    
    @login_required(login_url='/auth_login/')    #跳转到auth_login页面
    def auth_index(request):
        print(request.user.is_authenticated())  # 判断当前用户是否登录,登录返回True,没有登录返回False
        return HttpResponse('登录后才可以查看index页面')
    @login_required        #默认跳转的/login/页面
    def auth_register(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            user_obj = auth.authenticate(request, username=username)
            if user_obj:
                return HttpResponse('当前用户:%s已经存在') % username
            # 使用create创建用户不会加密,create_user创建普通用户会加密;create_superuser创建超级用户,密码会加密
            User.objects.create_user(username=username, password=password)
    
        return render(request, 'auth_register.html')

    自定义模型表应用auth功能(修改之前的功能表,添加新的字段,产生新的表)

    如何扩张auth_user表?
      一对一关联(不推荐) 
    from django.contrib.auth.model import User
    
    class UserDetail(models.Models):
    phone = models.CharField(max_length=11)
    user = models.OnoToOneField(to=User)

      面向对象的继承

    # 在models.py

    from
    django.contrib.auth.models import User,AbstractUser class UserInfo(AbstractUser):  #AbstractUser继承user表的所有字段 phone = models.CharField(max_length=32)  #添加新的字段

    # 需要在配置文件settings.py中,指定我不再使用默认的auth_user表而是使用我自己创建的Userinfo表
    AUTH_USER_MODEL = "app名.models里面对应的模型表名"

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

  • 相关阅读:
    windows如何安装python zmq
    vue.js 微信浏览器不支持lambda表达式
    Entity Framework贪婪加载筛选问题
    用swift开发自己的MacOS锁屏软件(3)
    用swift开发自己的MacOS锁屏软件(二)
    用swift开发自己的MacOS锁屏软件(一)
    The expression being assigned to optional parameter `v2' must be a constant or default value
    Laravel 使用firstOrCreate 报错MassAssignmentException
    一次PHP面试经历
    JUC学习!
  • 原文地址:https://www.cnblogs.com/yangzhaon/p/11048786.html
Copyright © 2011-2022 走看看