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时区设置方法与pytz查询时区教程
Nov 27 Python
python实现的简单窗口倒计时界面实例
May 05 Python
对Python中的条件判断、循环以及循环的终止方法详解
Feb 08 Python
Python实现的ftp服务器功能详解【附源码下载】
Jun 26 Python
Python实现一个带权无回置随机抽选函数的方法
Jul 24 Python
基于python调用psutil模块过程解析
Dec 20 Python
Python递归及尾递归优化操作实例分析
Feb 01 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
Jun 11 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 Python
python 实现百度网盘非会员上传超过500个文件的方法
Jan 07 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
Jan 28 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
一些星际专用术语解释
2020/03/04 星际争霸
第八节--访问方式
2006/11/16 PHP
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
Python守护进程用法实例分析
2015/06/04 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
python实现贪吃蛇小游戏
2020/03/21 Python
在python image 中实现安装中文字体
2020/05/16 Python
英国儿童鞋和靴子:Start-Rite
2019/05/06 全球购物
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
考试作弊检讨书大全
2014/02/18 职场文书
协议书的格式
2014/04/23 职场文书
十佳护士先进事迹
2014/05/08 职场文书
单位工作证明
2014/10/07 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
对Keras自带Loss Function的深入研究
2021/05/25 Python
PyTorch device与cuda.device用法
2022/04/03 Python