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 18 Python
python 不同方式读取文件速度不同的实例
Nov 09 Python
Python设计模式之策略模式实例详解
Jan 21 Python
使用python判断jpeg图片的完整性实例
Jun 10 Python
简单了解python的break、continue、pass
Jul 08 Python
利用Python库Scapy解析pcap文件的方法
Jul 23 Python
Python中print函数简单使用总结
Aug 05 Python
python文件读写代码实例
Oct 21 Python
python中return的返回和执行实例
Dec 24 Python
彻底搞懂 python 中文乱码问题(深入分析)
Feb 28 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
python读取mat文件生成h5文件的实现
Jul 15 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
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
ajax在joomla中的原生态应用代码
2012/07/19 PHP
PHP常用的小程序代码段
2015/11/14 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
2017/07/03 PHP
php实现算术验证码功能
2018/12/05 PHP
Extjs学习笔记之六 面版
2010/01/08 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
javascript下拉列表中显示树形菜单的实现方法
2015/11/17 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
JavaScript ES6中export、import与export default的用法和区别
2017/03/14 Javascript
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
Python3基础之函数用法
2014/08/13 Python
Python实现视频下载功能
2017/03/14 Python
python3 线性回归验证方法
2019/07/09 Python
Python目录和文件处理总结详解
2019/09/02 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
新加坡第一大健康与美容零售商:屈臣氏新加坡(Watsons Singapore)
2020/12/11 全球购物
南京某软件公司的.net面试题
2015/11/30 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
房地产促销活动方案
2014/03/01 职场文书
高一新生军训感言
2014/03/02 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
爱情保证书大全
2014/04/29 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
见习报告怎么写
2014/10/31 职场文书
我的生日感言
2015/08/03 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
Spring Cloud Gateway去掉url前缀
2021/07/15 Java/Android