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使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 Python
初步认识Python中的列表与位运算符
Oct 12 Python
Python实现嵌套列表去重方法示例
Dec 28 Python
matplotlib作图添加表格实例代码
Jan 23 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
使用python list 查找所有匹配元素的位置实例
Jun 11 Python
Django 在iframe里跳转顶层url的例子
Aug 21 Python
python实现随机加减法生成器
Feb 24 Python
Django celery异步任务实现代码示例
Nov 26 Python
Python用requests库爬取返回为空的解决办法
Feb 21 Python
python人工智能human learn绘图可创建机器学习模型
Nov 23 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/08 国漫
一个PHP模板,主要想体现一下思路
2006/12/25 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
Yaf框架封装的MySQL数据库操作示例
2019/03/06 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
js中将字符串转换成json的三种方式
2011/01/12 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
nodeJS微信分享
2017/12/20 NodeJs
JS实现多物体运动的方法详解
2018/01/23 Javascript
angular json对象push到数组中的方法
2018/02/27 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
Python 备份程序代码实现
2017/03/06 Python
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
Python 硬币兑换问题
2019/07/29 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
Django实现内容缓存实例方法
2020/06/30 Python
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
网上卖盒饭创业计划书范文
2014/02/07 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
大班下学期个人总结
2015/02/13 职场文书
学生会辞职信
2015/03/02 职场文书
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android