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 获取本机ip地址的两个方法
Feb 25 Python
pycharm 使用心得(九)解决No Python interpreter selected的问题
Jun 06 Python
Python中列表list以及list与数组array的相互转换实现方法
Sep 22 Python
Python线程创建和终止实例代码
Jan 20 Python
对python mayavi三维绘图的实现详解
Jan 08 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
django框架使用方法详解
Jul 18 Python
django中使用POST方法获取POST数据
Aug 20 Python
Python中__repr__和__str__区别详解
Nov 07 Python
Python-openCV读RGB通道图实例
Jan 17 Python
python判断字符串以什么结尾的实例方法
Sep 18 Python
python学习之panda数据分析核心支持库
May 07 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
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
东方红 - 来复式再生机的修复
2021/03/02 无线电
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
php中用memcached实现页面防刷新功能
2014/08/19 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
微信自定义菜单的创建/查询/取消php示例代码
2016/08/05 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
深入理解Node.js的HTTP模块
2016/10/12 Javascript
Vue计算属性的使用
2017/08/04 Javascript
angular4实现tab栏切换的方法示例
2017/10/21 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
Python正则表达式的使用范例详解
2014/08/08 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
python安装Scrapy图文教程
2017/08/14 Python
python获取文件真实链接的方法,针对于302返回码
2018/05/14 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
python实现zabbix发送短信脚本
2018/09/17 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
Python try except finally资源回收的实现
2021/01/25 Python
简单说说tomcat的配置
2013/05/28 面试题
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
中秋寄语大全
2014/04/11 职场文书
公司会议策划方案
2014/05/17 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
2015社区个人工作总结范文
2015/05/13 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技