标签:html ack token setting require 用户表 end box required
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难怪一直不匹配
标签:html ack token setting require 用户表 end box required
原文地址:https://www.cnblogs.com/venvive/p/11437543.html