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 04 Python
通过数据库向Django模型添加字段的示例
Jul 21 Python
对numpy中向量式三目运算符详解
Oct 31 Python
详解爬虫被封的问题
Apr 23 Python
python学习开发mock接口
Apr 28 Python
Python pandas.DataFrame 找出有空值的行
Sep 09 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
Feb 20 Python
使用Python爬取弹出窗口信息的实例
Mar 14 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
Python run()函数和start()函数的比较和差别介绍
May 03 Python
Python中logger日志模块详解
Aug 04 Python
如何利用python检测图片是否包含二维码
Oct 15 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
用php+mysql一个名片库程序
2006/10/09 PHP
第十三节--对象串行化
2006/11/16 PHP
PHP文件上传实例详解!!!
2007/01/02 PHP
PHP文件上传操作实例详解
2016/09/27 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
python原始套接字编程示例分享
2014/02/21 Python
python利用不到一百行代码实现一个小siri
2017/03/02 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
求职信格式范本
2013/11/15 职场文书
创业计划书的主要内容有哪些
2014/01/29 职场文书
宾馆总经理岗位职责
2014/02/14 职场文书
元旦活动感言
2014/03/08 职场文书
销售经理岗位职责
2014/03/16 职场文书
工商干部先进事迹
2014/05/14 职场文书
教师读书笔记
2015/06/29 职场文书
大学生十八大感想
2015/08/11 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
初中英语教学反思范文
2016/02/15 职场文书
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB
「月刊Action」2022年5月号封面公开
2022/03/21 日漫