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)

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

扫描二维码关注公众号,回复: 7139122 查看本文章
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难怪一直不匹配

 

猜你喜欢

转载自www.cnblogs.com/venvive/p/11437543.html
今日推荐