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中函数eval和ast.literal_eval的区别详解
Aug 10 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
python实现屏保计时器的示例代码
Aug 08 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
python利用跳板机ssh远程连接redis的方法
Feb 19 Python
Python安装Flask环境及简单应用示例
May 03 Python
python百行代码自制电脑端网速悬浮窗的实现
May 12 Python
python对一个数向上取整的实例方法
Jun 18 Python
Python批量获取并保存手机号归属地和运营商的示例
Oct 09 Python
10个示例带你掌握python中的元组
Nov 23 Python
Python之京东商品秒杀的实现示例
Jan 06 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
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
php生成高清缩略图实例详解
2015/12/07 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
Python fileinput模块使用实例
2015/06/03 Python
Python中字典的基础知识归纳小结
2015/08/19 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
NumPy统计函数的实现方法
2020/01/21 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
销售行业个人求职自荐信
2013/09/25 职场文书
应届生财务会计求职信
2013/11/05 职场文书
测绘工程系学生的自我评价
2013/11/30 职场文书
缴纳养老保险的证明
2014/01/10 职场文书
董事长秘书工作职责
2014/06/10 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL
浅谈Python项目的服务器部署
2021/04/25 Python
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL