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输出9*9乘法表的方法
May 25 Python
python解析xml文件实例分析
May 27 Python
Tensorflow环境搭建的方法步骤
Feb 07 Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 Python
在Python中字典根据多项规则排序的方法
Jan 21 Python
Python实现去除列表中重复元素的方法总结【7种方法】
Feb 16 Python
使用celery执行Django串行异步任务的方法步骤
Jun 06 Python
python2.7实现复制大量文件及文件夹资料
Aug 31 Python
numpy ndarray 取出满足特定条件的某些行实例
Dec 05 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
Python线程协作threading.Condition实现过程解析
Mar 12 Python
Python select及selectors模块概念用法详解
Jun 22 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调用三种数据库的方法(3)
2006/10/09 PHP
服务器端解压缩zip的脚本
2006/12/22 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
2013/01/29 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
jQuery中get()方法用法实例
2014/12/27 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
零基础写python爬虫之神器正则表达式
2014/11/06 Python
Django中对数据查询结果进行排序的方法
2015/07/17 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
阿巴庭院:Abba Patio
2019/06/18 全球购物
Python面试题:Python里面如何生成随机数
2015/03/12 面试题
《莫泊桑拜师》教学反思
2014/04/23 职场文书
公司离职证明样本
2014/09/13 职场文书
2014年党员加强作风建设思想汇报
2014/09/15 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
努力工作保证书
2015/02/28 职场文书
师范生见习自我总结
2015/06/23 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS
浅谈python中的多态
2021/06/15 Python
JavaScript实现两个数组的交集
2022/03/25 Javascript
Linux磁盘管理方法介绍
2022/06/01 Servers
python缺失值填充方法示例代码
2022/12/24 Python