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下调用Linux的Shell命令的方法
Jun 12 Python
Python闭包函数定义与用法分析
Jul 20 Python
celery4+django2定时任务的实现代码
Dec 23 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
Python批量修改图片分辨率的实例代码
Jul 04 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
Jul 15 Python
详解python中index()、find()方法
Aug 29 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
Mar 18 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
Django模型验证器介绍与源码分析
Sep 08 Python
让文件路径提取变得更简单的Python Path库
May 27 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 HandlerSocket的使用
2011/05/02 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
2015/10/10 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
javascript中负数算术右移、逻辑右移的奥秘探索
2013/10/17 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
jquery实现点击消失的代码
2014/03/03 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
详述JavaScript实现继承的几种方式(推荐)
2016/03/22 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
React中常见的动画实现的几种方式
2018/01/10 Javascript
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
vuex页面刷新后数据丢失的方法
2019/01/17 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
python判断、获取一张图片主色调的2个实例
2014/04/10 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
python中os.remove()用法及注意事项
2021/01/31 Python
俄罗斯香水和化妆品购物网站:Л’Этуаль
2018/05/10 全球购物
销售人员自我评价怎么写
2013/09/19 职场文书
财务会计专业毕业生自荐信
2013/10/19 职场文书
最新创业融资计划书
2014/01/19 职场文书
中队活动总结
2014/08/27 职场文书
财务工作检讨书
2014/10/29 职场文书
幼儿园感谢信
2015/01/21 职场文书