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执行外部程序的常用方法小结
Mar 21 Python
Python多线程编程(三):threading.Thread类的重要函数和方法
Apr 05 Python
Python装饰器用法示例小结
Feb 11 Python
Python数据处理numpy.median的实例讲解
Apr 02 Python
python读取和保存视频文件
Apr 16 Python
Python实现随机漫步功能
Jul 09 Python
Python中作用域的深入讲解
Dec 10 Python
Django实现学员管理系统
Feb 26 Python
django框架用户权限中的session缓存到redis中的方法
Aug 06 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
Jan 08 Python
python学生管理系统的实现
Apr 05 Python
Django开发RESTful API实现增删改查(入门级)
May 10 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/02 无线电
分享3个php获取日历的函数
2015/09/25 PHP
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
javascript EXCEL 操作类代码
2009/07/30 Javascript
JavaScript 基本概念
2015/01/20 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
python解析模块(ConfigParser)使用方法
2013/12/10 Python
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
Python对象的属性访问过程详解
2020/03/05 Python
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
介绍一下Java中标识符的命名规则
2014/02/03 面试题
司仪主持词两篇
2014/03/22 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
《观潮》教学反思
2016/02/17 职场文书
SQL Server代理:理解SQL代理错误日志处理方法
2021/06/30 SQL Server
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android