我们在系统开发时都会遇到用户登录的需求,使用Django 用户认证(Auth)组件可以帮助我们判断当前的用户是否合法,快速实现用户登录、验证和退出。
1. 关键点
初始化Django数据库,因为我们使用的是框架自带的User进行验证。
创建登录、退出等界面的视图,制作界面模板。
在
setting.py
文件中设置LOGIN_URL = '/login/'
指定登录的url。使用
@login_required()
装饰器设置需要用户登录才能访问的视图。
2. 初始化数据库
- 创建数据库
python manger.py makemigrations
python manager.py migrate
- 创建用户
python manage.py createsuperuser
3. 创建模板和视图
-
创建模板
- 首页模板,需要用户登录才能查看--
index.html
- 首页模板,需要用户登录才能查看--
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<div>登录成功页面,只有登录成功才能看见!</div>
<div> <a href="//www.greatytc.com/logout/">退出</a> </div>
</body>
</html>
- 登录页面,如果用户没有登录或者登录失败显示的页面--
login.html
<!DOCTYPE html>
<html lang="en">
<head>
{% load static %}
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- meta data -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- title of site -->
<title>Sign in</title>
<!-- For favicon png -->
<!--font-awesome.min.css-->
<link rel="stylesheet" href="{% static "css/font-awesome.min.css" %}">
<!--animate.css-->
<link rel="stylesheet" href="{% static "css/animate.css" %}">
<!--bootstrap.min.css-->
<link rel="stylesheet" href="{% static "css/bootstrap.min.css" %}">
<!-- bootsnav -->
<link rel="stylesheet" href="{% static "css/bootsnav.css" %}">
<!--style.css-->
<link rel="stylesheet" href="{% static "css/style.css" %}">
<!--responsive.css-->
<link rel="stylesheet" href="{% static "css/responsive.css" %}">
</head>
<body>
<div class="wrapper">
<!-- signin begin -->
<section class="signin popup-in">
<div class="container">
<div class="sign-content popup-in-content">
<div class="popup-in-txt">
<h2>Django登录演示</h2>
<div class="row">
<div class="col-sm-12">
<div class="signin-form">
<form action="/login_auth/" method="post">
{% csrf_token %}
<div class="form-group">
<label for="username">用户名</label>
<input type="text" class="form-control" name="username" placeholder="输入用户名">
</div><!--/.form-group -->
<div class="form-group">
<label for="password">密码</label>
<input type="password" class="form-control" name="password" placeholder="输入密码">
</div><!--/.form-group -->
<div class="form-group">
<input type="submit" class="form-control btn signin_btn" value="登录">
{% if error %}
<p style="color: red;">{{ error }}</p>
{% endif %}
</div><!--/.form-group -->
</form><!--/form -->
</div><!--/.signin-form -->
</div><!--/.col -->
</div><!--/.row -->
</div><!-- .popup-in-txt -->
</div><!--/.sign-content -->
</div><!--/.container -->
</section><!--/.signin -->
<!-- signin end -->
<!--footer copyright start -->
<footer class="footer-copyright">
<div id="scroll-Top">
<i class="fa fa-angle-double-up return-to-top" id="scroll-top" data-toggle="tooltip" data-placement="top" title="" data-original-title="Back to Top" aria-hidden="true"></i>
</div><!--/.scroll-Top-->
</footer><!--/.hm-footer-copyright-->
<!--footer copyright end -->
</div>
</body>
</html>
-
创建视图
首页视图--
index
登录视图--
my_login
登录验证视图--
login_auth
退出视图--
my_logout
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate, login, logout
# Create your views here.
def login_auth(request):
"""
:return:
成功:重定向到首页
失败:返回login页面,并提示错误
"""
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
print(username)
user = authenticate(username=username, password=password)
if user is not None:
login(request, user) # 保存登录会话,将登陆的信息封装到request.user,包括session
return redirect("/")
else:
return render(request, 'login.html', {'error': '用户名户密码错误!'})
return redirect("/login/")
def my_login(request):
"""
:param request
:return: 展示登录页面
"""
return render(request, "login.html")
@login_required()
def my_logout(request):
"""
:param request
:return: 退出并重定向到登录页面
"""
logout(request)
return redirect("/login/")
@login_required()
def index(request):
"""
:param request
:return: 用户首页
"""
return render(request, "index.html")
4. 设置LOGIN_URL
Django中LOGIN_URL
默认是/accounts/login/
,如果我们不设置就会跳转到/accounts/login/
页面去,因此需要我们覆写这个值,让它指向我们的登录页面。
LOGIN_URL = '/login/'
5.添加装饰器
使用django自带的装饰器 @login_required,就可以判断用户是否登录,只需要在相应的view方法的前面添加@login_required。
6.展示
最后给大家做个展示:
你学会了吗,赶紧去试试吧!!!