django 函数实现登陆功能

一、新增users views.py代码如下:

# _*_ 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

from .models import UserProfile

# Create your views here.


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', {})

二、settings.py新增

# Application definition
AUTHENTICATION_BACKENDS = (
    'users.views.CustomBackend',
)

三、urls.py 新增

#_*_encoding:utf-8_*_

# xadmin的依赖
import xadmin
from xadmin.plugins import xversion
from django.conf.urls import url
from django.views.generic import TemplateView
from users.views import user_login

xadmin.autodiscover()

# version模块自动注册需要版本控制的 Model

xversion.register_models()


urlpatterns = [
    url(r'^adminx/', xadmin.site.urls),

    url(r'^$', TemplateView.as_view(template_name="index.html"), name='index'),
    url(r'^login/$', user_login, name="login"),


]

四、index.html 修改显示逻辑

<!--登录后跳转-->
# 如果登录成功显示个人中心控件
{% if request.user.is_authenticated %}

	   <div class="personal">
	<dl class="user fr">
		<dd>{{ nickname }}<img class="down fr" src="/static/images/top_down.png"/></dd>
		<dt><img width="20" height="20" src="/static/media/image/2016/12/default_big_14.png"/></dt>
	</dl>
	<div class="userdetail">
		<dl>
			<dt><img width="80" height="80" src="/static/media/image/2016/12/default_big_14.png"/></dt>
			<dd>
				<h2>django</h2>
				<p>bobby</p>
			</dd>
		</dl>
		<div class="btn">
			<a class="personcenter fl" href="usercenter-info.html">进入个人中心</a>
			<a class="fr" href="/logout/">退出</a>
		</div>
	</div>
</div>
# 如果未登录显示登录注册按钮
	{% else %}
		 <a style="color:white" class="fr registerbtn" href="register.html">注册</a>
		<a style="color:white" class="fr loginbtn" href="/login/">登录</a>
{% endif %}

五、login.html 修改如下

<!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"/>
                    <div class="form-group marb20 ">
                        <label>用&nbsp;户&nbsp;名</label>
                        <input name="username" id="account_l" type="text" placeholder="手机号/邮箱" />
                    </div>
                    <div class="form-group marb8 ">
                        <label>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码</label>
                        <input name="password" id="password_l" type="password" placeholder="请输入您的密码" />
                    </div>
                    <div class="error btns login-form-tips" id="jsLoginTips">{{ 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>

六、验证逻辑是否ok

发布了42 篇原创文章 · 获赞 11 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/QWERTY55555/article/details/105540627