zoukankan      html  css  js  c++  java
  • CRM自定义用户登陆

    CRM自定义用户登陆

    创建一个登陆的页面login.hmtl文件

    login.html

    {% extends 'base.html'%}
    
    {% block body %}
    
      <body>
    
        <div class="container col-lg-3 col-lg-offset-3">
    
          <form class="form-signin" method="post">{%csrf_token%}
            <h2 class="form-signin-heading">Please sign in</h2>
            <!--<label for="inputEmail" class="sr-only">Email address</label>-->
            <input type="email" id="inputEmail" class="form-control" name="email" placeholder="Email address" required autofocus>
            <!--<label for="inputPassword" class="sr-only">Password</label>-->
            <input type="password" id="inputPassword" class="form-control" name="password" placeholder="Password" required>
            <span style="color: red">{{error.error}} </span>
            <div class="checkbox">
                <label>
                <input type="checkbox" value="remember-me"> Remember me
                </label>
            </div>
            <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
          </form>
    
        </div> <!-- /container -->
    
    
        <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
      </body>
    {% endblock %}

    在PerfectCRM/urls.py文件中加入登陆的地址

    url(r'^account/login/',views.acc_login,name="acc_login"),

    在PerfectCRM/views.py文件中定义一个函数,处理登陆

    如果想要是只有登陆了才能直接用url访问页面,得在kind_admin.py文件中的函数前加上@login_required

    from django.contrib.auth.decorators import login_required

    没有登陆的话直接访问页面,那就返回到登陆页面,登陆之后跳转到刚才想要访问的页面,直接访问页面时会有一个next参数判断这个就好

    PerfectCRM/views.py

    django自带有用户密码认证的

    from django.contrib.auth import login,authenticate,logout
    user = authenticate(email=_email,password=_password)

    django自带的登陆,如果邮箱和密码是匹配的那么user就是email的对象,如果不匹配那么user值就是None

               
    from django.contrib.auth import login,authenticate,logout
     login(request, user)

    如果是直接访问页面的地址如下的地址会直接返回到登陆页,登陆之后才会到他想要的页面:

    http://127.0.0.1:8000/account/login/?next=/kind_admin/crm/customer/

    获取next的值,post和get的请求方式是共存的

    def acc_login(request):
        """登陆页面"""
        error={}
        print("request.POST:",request.POST)
        if request.method == "POST":
            _email = request.POST.get("email")
            print("request.POST.get('email')",_email)
            _password = request.POST.get("password")
            print("request.POST.get('password')",_password)
    
            user = authenticate(email=_email,password=_password)
            print("user",user)
            if user:
                login(request, user)
                next_url = request.GET.get("next","/")
                print("next_url:",next_url)
    
                return redirect(next_url)
            else:
                error["error"]="email or password wrong"
        return render(request,"login.html",{"error":error})

    登陆之后里面也有一个退出的按钮,点击他会跳转到登陆页面

    登出的前端是在table_index.html

            <div id="navbar" class="navbar-collapse collapse">
              <ul class="nav navbar-nav navbar-right">
                <li class="dropdown">
                  <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="false" aria-expanded="false">{{request.user.name}} <span class="caret"></span></a>
                  <ul class="dropdown-menu" role="menu">
                    <li><a href="#">配置</a></li>
                    <li><a href="{%url 'acc_logout'%}">退出登陆</a></li>
                  </ul>
                </li>
              </ul>
            </div>
    为了admin跳转到那个登陆页面,默认是/accounts/login/可以在Perfectcrm/settings.py文件中设置跳转到的是哪个登陆页面
    LOGIN_URL = "/account/login/" #为了admin跳转到那个登陆页面,默认是/accounts/login/

    Perfectcrm/urls.py中设置登出的url

     url(r'^account/logout/',views.acc_logout,name="acc_logout")

    在Perfectcrm/views.py文件中处理登出

    django有自带的登出logout函数

    from django.contrib.auth import login,authenticate,logout
    def acc_logout(request):
        """退出页面"""
        logout(request)
        return redirect("/account/login/")

    如果想要出现用户权限页面可以在role表中设置那个用户有什么权限可以展示那些页面

    总结:

    虽然登陆页面比较简单但是我还是掉进了很简单不应该的坑里面:

    1、登陆页面的email、password的输入框,我把这两个值的input的name都写在了其他地方导致我看后端返回的值一直都是None

    2、django的登陆认证authenticate,返回的值一直是None,我试了邮箱和密码都是正确的,最后原来是我明明创建用户表的时候是用email和password,但是我认证的时候一直填的是username和password难怪一直不匹配

     
  • 相关阅读:
    深入理解 CSS3 弹性盒布局模型
    【css基础】文本对齐,水平对齐,垂直对齐
    使用百度地图API进行坐标系转换
    dtgrid 手动条件删除表格中的某一行
    短时间生成大量不重复随机数字
    Android与.Net交互模拟用户屏幕操作添加APN和网络4G/3G切换
    (三)SpringBoot定义统一返回result对象
    (二)SpringBoot整合常用框架Druid连接池
    (一)搭建自己的SpringBoot后台框架整合MyBatis
    插件-鼠标或手指滑动事件
  • 原文地址:https://www.cnblogs.com/venvive/p/11437543.html
Copyright © 2011-2022 走看看