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 相关文章推荐
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
Oct 12 Python
Python 使用os.remove删除文件夹时报错的解决方法
Jan 13 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
Python OpenCV处理图像之滤镜和图像运算
Jul 10 Python
Python3并发写文件与Python对比
Nov 20 Python
如何基于Python创建目录文件夹
Dec 31 Python
python实现串口通信的示例代码
Feb 10 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
Mar 25 Python
python用opencv完成图像分割并进行目标物的提取
May 25 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 Python
解决import tensorflow导致jupyter内核死亡的问题
Feb 06 Python
关于Python中进度条的六个实用技巧分享
Apr 05 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
一个简单的域名注册情况查询程序
2006/10/09 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
2015/10/27 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
js中cookie的使用详细分析
2008/05/28 Javascript
js中eval()函数和trim()去掉字符串左右空格应用
2013/02/02 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
JS刷新当前页面的几种方法总结
2013/12/24 Javascript
将form表单中的元素转换成对象的方法适用表单提交
2014/05/02 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
JavaScript判断微信浏览器实例代码
2016/06/13 Javascript
Jquery调用iframe父页面中的元素及方法
2016/08/23 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
JS中的三个循环小结
2017/06/20 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
2020/11/24 Javascript
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
美国女孩服装购物网站:Justice
2017/03/04 全球购物
大学毕业生通用自我评价
2014/01/05 职场文书
党员批评与自我批评
2014/02/12 职场文书
教师产假请假条范文
2014/04/10 职场文书
大学优秀班主任事迹材料
2014/05/02 职场文书
机关党员三严三实心得体会
2014/10/13 职场文书
2014年志愿者工作总结
2014/11/20 职场文书
巾帼建功标兵先进事迹材料
2016/02/29 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书