一、users 新建 forms.py
# _*_encoding:utf-8_*_
__author__ = 'wuhuhuan'
__date__ = '2020/4/18 11:42'
from django import forms
class LoginForm(forms.Form):
username = forms.CharField(required=True)
password = forms.CharField(required=True, min_length=5)
二、users views.py新增forms 判斷
# _*_ coding:utf-8 _*_
from django.shortcuts import render
from django.contrib.auth import authenticate, login
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
# 導入view類
from django.views.generic.base import View
from .models import UserProfile
# 導入loginForm 類
from users.forms import LoginForm
# Create your views here.
#新增定義 loginViw 方法繼承View
class LoginView(View):
def get(self, request):
return render(request, "login.html", {})
def post(self, request):
login_form = LoginForm(request.POST)
# 新增判斷是否必填、是否爲空、字符長度判斷
if login_form.is_valid():
user_name = request.POST.get("username", "")
pass_word = request.POST.get("password", "")
user = authenticate(username=user_name, password=pass_word)
if user is not None:
login(request, user)
return render(request, "index.html", {'nickname': user})
else:
return render(request, "login.html", {"msg": u"用戶名或密碼錯誤"})
else:
return render(request, "login.html", {"login_form": login_form})
class CustomBackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
try:
user = UserProfile.objects.get(Q(username=username) | Q(email=username))
if user.check_password(password):
return user
except Exception as e:
return None
def user_login(request):
if request.method == 'POST':
user_name = request.POST.get("username", "")
pass_word = request.POST.get("password", "")
user = authenticate(username=user_name, password=pass_word)
if user is not None:
login(request, user)
return render(request, "index.html", {'nickname': user})
else:
return render(request, "login.html", {'msg': u"用戶名或密碼錯誤!"})
elif request.method == 'GET':
return render(request, 'login.html', {})
四、修改login.html focus和對應提示判斷
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" >
<title>慕學在線網登錄</title>
<link rel="stylesheet" type="text/css" href="/static/css/reset.css">
<link rel="stylesheet" type="text/css" href="/static/css/login.css">
</head>
<body>
<div class="dialog" id="jsDialog">
<!--提示彈出框-->
<div class="successbox dialogbox" id="jsSuccessTips">
<h1>成功提交</h1>
<div class="close jsCloseDialog"><img src="/static/images/dig_close.png"/></div>
<div class="cont">
<h2>您的需求提交成功!</h2>
<p></p>
</div>
</div>
<div class="noactivebox dialogbox" id="jsUnactiveForm" >
<h1>郵件驗證提示</h1>
<div class="close jsCloseDialog"><img src="/static/images/dig_close.png"/></div>
<div class="center">
<img src="/static/images/send.png"/>
<p>我們已經向您的郵箱<span class="green" id="jsEmailToActive">[email protected]</span>發送了郵件,<br/>爲保證您的賬號安全,請及時驗證郵箱</p>
<p class="a"><a class="btn" id="jsGoToEmail" target="_blank" href="http://mail.qq.com">去郵箱驗證</a></p>
<p class="zy_success upmove"></p>
<p style="display: none;" class="sendE2">沒收到,您可以查看您的垃圾郵件和被過濾郵件,也可以再次發送驗證郵件(<span class="c5c">60s</span>)</p>
<p class="sendE">沒收到,您可以查看您的垃圾郵件和被過濾郵件,<br/>也可以<span class="c5c green" id="jsSenEmailAgin" style="cursor: pointer;">再次發送驗證郵件</span></p>
</div>
</div>
</div>
<div class="bg" id="dialogBg"></div>
<header>
<div class="c-box fff-box">
<div class="wp header-box">
<p class="fl hd-tips">慕學在線網,在線學習平臺!</p>
<ul class="fr hd-bar">
<li>服務電話:<span>33333333</span></li>
<li class="active"><a href="login.html">[登錄]</a></li>
<li><a href="register.html">[註冊]</a></li>
</ul>
</div>
</div>
</header>
<section>
<div class="c-box bg-box">
<div class="login-box clearfix">
<div class="hd-login clearfix">
<a class="index-logo" href="index.html"></a>
<h1>用戶登錄</h1>
<a class="index-font" href="index.html">回到首頁</a>
</div>
<div class="fl slide">
<div class="imgslide">
<ul class="imgs">
<li><a href=""><img width="483" height="472" src="/static/images/mysql.jpg" /></a></li>
<li><a href=""><img width="483" height="472" src="/static/images/mysql.jpg" /></a></li>
<li><a href=""><img width="483" height="472" src="/static/images/mysql.jpg" /></a></li>
</ul>
</div>
<div class="unslider-arrow prev"></div>
<div class="unslider-arrow next"></div>
</div>
<div class="fl form-box">
<h2>帳號登錄</h2>
<form action="/login/" method="post" autocomplete="off">
<input type="hidden" name="csrfmiddlewaretoken" value="mymQDzhw12REX"/>
<!-- 用 戶 名focus 判斷 -->
<div class="form-group marb20 {% if login_form.errors.username %}errorput{% endif %}">
<label>用 戶 名</label>
<input name="username" id="account_l" type="text" placeholder="手機號/郵箱" />
</div>
<!-- 用 戶 名focus 判斷 -->
<div class="form-group marb8 {% if login_form.errors.password %}errorput{% endif %}">
<label>密 碼</label>
<input name="password" id="password_l" type="password" placeholder="請輸入您的密碼" />
</div>
<!-- 提示判斷 -->
<div class="error btns login-form-tips" id="jsLoginTips">{% for key,error in login_form.errors.items %}{{ error }}{% endfor %} {{ msg }}</div>
<div class="auto-box marb38">
<a class="fr" href="forgetpwd.html">忘記密碼?</a>
</div>
<input class="btn btn-green" id="jsLoginBtn" type="submit" value="立即登錄 > " />
{% csrf_token %}
</form>
<p class="form-p">沒有慕學在線網帳號?<a href="register.html">[立即註冊]</a></p>
</div>
</div>
</div>
</section>
<script src="/static/js/jquery.min.js" type="text/javascript"></script>
<script src="/static/js/unslider.js" type="text/javascript"></script>
<script src="/static/js/login.js" type="text/javascript"></script>
</body>
</html>
四、驗證