django用户登录验证的完整示例代码


Posted in Python onJuly 21, 2019

1,urls.py内容:

from django.conf.urls import url 
from django.contrib import admin
from myApp import views
urlpatterns = [
 url(r'^admin/', admin.site.urls),
 url(r'^login/$', views.login),
 url(r'^index/$', views.index),
]

2,views.py内容

说明:

要使用session前提是要在settings.py文件中session注册了

如下:

django用户登录验证的完整示例代码

# -*- coding: utf-8 -*-
from django.shortcuts import render, redirect, HttpResponse

# Create your views here.
# from django.contrib import auth
# from django.contrib.auth.decorators import login_required

from myApp.models import Students,Grades,User
from functools import wraps
# 说明:这个装饰器的作用,就是在每个视图函数被调用时,都验证下有没法有登录,
# 如果有过登录,则可以执行新的视图函数,
# 否则没有登录则自动跳转到登录页面。
def check_login(f):
 @wraps(f)
 def inner(request,*arg,**kwargs):
  if request.session.get('is_login')=='1':
   return f(request,*arg,**kwargs)
  else:
   return redirect('/login/')
 return inner

def login(request):
 # 如果是POST请求,则说明是点击登录按扭 FORM表单跳转到此的,那么就要验证密码,并进行保存session
 if request.method=="POST":
  username=request.POST.get('username')
  password=request.POST.get('password')

  user=User.objects.filter(username=username,password=password)
  print(user)
  if user:
   #登录成功
   # 1,生成特殊字符串
   # 2,这个字符串当成key,此key在数据库的session表(在数据库存中一个表名是session的表)中对应一个value
   # 3,在响应中,用cookies保存这个key ,(即向浏览器写一个cookie,此cookies的值即是这个key特殊字符)
   request.session['is_login']='1' # 这个session是用于后面访问每个页面(即调用每个视图函数时要用到,即判断是否已经登录,用此判断)
   # request.session['username']=username # 这个要存储的session是用于后面,每个页面上要显示出来,登录状态的用户名用。
   # 说明:如果需要在页面上显示出来的用户信息太多(有时还有积分,姓名,年龄等信息),所以我们可以只用session保存user_id
   request.session['user_id']=user[0].id
   return redirect('/index/')
 # 如果是GET请求,就说明是用户刚开始登录,使用URL直接进入登录页面的
 return render(request,'login.html')

@check_login
def index(request):
 # students=Students.objects.all() ## 说明,objects.all()返回的是二维表,即一个列表,里面包含多个元组
 # return render(request,'index.html',{"students_list":students})
 # username1=request.session.get('username')
 user_id1=request.session.get('user_id')
 # 使用user_id去数据库中找到对应的user信息
 userobj=User.objects.filter(id=user_id1)
 print userobj
 if userobj:
  return render(request,'index.html',{"user":userobj[0]})
 else:
  return render(request,'index.html',{'user','匿名用户'})

3,models.py内容

from django.db import models
class User(models.Model):
 username=models.CharField(max_length=16)
 password=models.CharField(max_length=32)

4,login.html内容

<body>

<h1>欢迎登录!</h1>
<form action="/login/" method="post">
 {% csrf_token %}
 <p>
  用户名:
  <input type="text" name="username">
 </p>
 <p>
  密码:
  <input type="text" name="password">
 </p>
 <p>
  <input type="submit" value="登录">
 </p>
 <hr>
</form>
</body>

5,这是index.html的内容

<body>
 <!-- {%for student in students_list%}
  {{student.sname}}--{{student.sage}}
  <br>
 {%endfor%} -->
 <h1>这是一个index页面</h1>
 <p>欢迎:{{user.username}}--{{user.password}}</p>

 </body>

5,如果没有登录前,直接输入http://localhost:8000/index/ 则会自动跳转到login页面

如果登录成功了,则会跳转到index.html页面:

页面显示如下:

django用户登录验证的完整示例代码

注明:

,以下截图是我们事先保存到数据库中的username和password

django用户登录验证的完整示例代码

注明:

6,可以查看浏览器保存的session如下截图,

django用户登录验证的完整示例代码

则数据库里保存的则是此key对应的value,如下截图:

django用户登录验证的完整示例代码

说明:key 就是我们在视图函数中的is_login 值就是1

django用户登录验证的完整示例代码

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python深入学习之内存管理
Aug 31 Python
Python实现八大排序算法
Aug 13 Python
python的exec、eval使用分析
Dec 11 Python
详解Django中六个常用的自定义装饰器
Jul 04 Python
浅谈python的输入输出,注释,基本数据类型
Apr 02 Python
python安装numpy和pandas的方法步骤
May 27 Python
如何实现Django Rest framework版本控制
Jul 25 Python
Python 实现遥感影像波段组合的示例代码
Aug 04 Python
python根据多个文件名批量查找文件
Aug 13 Python
python3爬取torrent种子链接实例
Jan 16 Python
Python编程快速上手——正则表达式查找功能案例分析
Feb 28 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
Python Threading 线程/互斥锁/死锁/GIL锁
Jul 21 #Python
详解Django模版中加载静态文件配置方法
Jul 21 #Python
django数据库自动重连的方法实例
Jul 21 #Python
django使用django-apscheduler 实现定时任务的例子
Jul 20 #Python
python 自定义装饰器实例详解
Jul 20 #Python
Python 列表去重去除空字符的例子
Jul 20 #Python
python列表每个元素同增同减和列表元素去空格的实例
Jul 20 #Python
You might like
PHP经典的给图片加水印程序
2006/12/06 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
JavaScript加强之自定义callback示例
2013/09/21 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
JS中使用media实现响应式布局
2017/08/04 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
angular4+百分比进度显示插件用法示例
2019/05/05 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
浅谈Django REST Framework限速
2017/12/12 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
python安装本地whl的实例步骤
2019/10/12 Python
Python 用turtle实现用正方形画圆的例子
2019/11/21 Python
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
实习生自我鉴定
2013/12/12 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
三好学生竞选稿
2015/11/21 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server