登陆验证

  因为http协议是无状态协议,但是我们有时候需要这个状态,这个状态就是标识

  前端提交from表单,后端获取对应输入值,与数据库对比,由此对象设置一个标识,该对象

在别的视图的时候,有此标识,可以访问,没有则让其去登陆

  所以,cookie,session应运而生

一,cookie验证流程

 cookie
客户端(浏览器)第一次请求登陆页面的时候,携带的cookie是空,响应页面也没有给cookie设置
提交form 表单的时候,携带的cookie是空,服务器去判断,有这个用户,设置了cookie
跳转到首页携带了cookie
删除cokkie
response.delete_cookie("cookie_key",path="/",domain=name)

设置cookie

 login 函数视图
user=UserInfo.objects.filter(username=user,password=pwd).first() if user:
obj=redirect("/index/")
obj.set_cookie("is_login",True,path='/',max_age=10,expires=10)
# cookie 参数
# def set_cookie(self, key, 键
#           value = '', 值
#              max_age = None, 超长时间
#              expires = None, 超长时间
#              path = '/', Cookie生效的路径,
# 浏览器只会把cookie回传给带有该路径的页面,这样可以避免将
# cookie传给站点中的其他的应用。
# / 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
obj.set_cookie("username",user.username)
return obj index 函数视图
ret=request.COOKIES.get('is_login')
if ret:
return render(request,"index.html")
return redirect("/login/")

二,cookie+session验证流程

 cookie + session
与cookie 相同
只是cookie保存的是 session_id:随机字符串 客户端
随机字符串,data 以键值对方式保存在 django_session里面 服务器
跳转首页去跟服务器django_session去拿值
删除 session
可以删除 del request.session['is_login'] 这也只是在django_session里面的data里面删除这个键值对
还可以 这样 request.session.flush() 这样是删除django_sesssion里面的一条记录

设置session

 login 函数视图
user=UserInfo.objects.filter(username=user,password=pwd).first() if user:
# 注意这里设置 session
request.session["Is_login"]=True
return redirect("/index/") index 函数视图
ret=request.session.get('is_login')
if ret:
return render(request,"index.html")
return redirect("/login/")

三,auth验证流程

 auth
与cookie 相同
随机字符串,data 以键值对方式保存在 django_session里面 客户端
跳转首页去跟服务器django_session去拿值 服务器
auth 模块有自己的验证机制,通过
auth.authenticate(username=user,password=pwd) 匹配验证
auth.login(request,user) 设置session
request.is_authenticated() 是否通过验证,返回true,false
auth.logout(request) 删除django_session一条记录

auth验证  ,httprequest.user

 HttpRequest.user

   一个 AUTH_USER_MODEL 类型的对象,表示当前登录的用户。

   如果用户当前没有登录,user 将设置为 django.contrib.auth.models.AnonymousUser 的一个实例。你可以通过 is_authenticated() 区分它们。

     例如:

     if request.user.is_authenticated():
# Do something for logged-in users.
else:
# Do something for anonymous users. user 只有当Django 启用 AuthenticationMiddleware 中间件时才可用。

auth验证 实际例子(登陆,注册,更改密码)

注意,from表单里面不应该有button按钮,会当成数据提交

 from django.contrib.auth.models import User
from django.contrib import auth
def login(request):
if request.method == "POST":
user = request.POST.get("user")
pwd = request.POST.get("pwd")
# django 利用自身auth_user表验证,去表里匹配
user=auth.authenticate(username=user,password=pwd)
if user:
# 验证通过,会记录在 djangos_session 表里面一条记录 给某个已认证的用户附加上session id
auth.login(request,user) # 设置session cookie记录 session_id:随机字符串 django_session 随机字符串:session_data
return redirect("/index/") return render(request, "login.html") def index(request):
user=request.user # 显示当前登录用户对象 if not user.is_authenticated(): # 是否通过验证
return redirect("/login/") name=request.user.username
return render(request,"index.html",{"name":name}) def log_out(request):
'''
注销
:param request:
:return:
'''
auth.logout(request) # request.session.flush()
return redirect("/login/") def reg(request):
if request.method == "POST":
user = request.POST.get("user")
pwd = request.POST.get("pwd") user=User.objects.create_user(username=user,password=pwd) # 创建用户信息
return redirect("/login/") return render(request,"reg.html") def setpwd(request):
'''
更改 密码 ###########
:param request:
:return:
'''
if request.method == "POST":
user = request.POST.get("user")
pre_pwd = request.POST.get("pre_pwd")
new_pwd = request.POST.get("new_pwd")
repeat_pwd = request.POST.get("repeat_pwd")
# 没有判断输入新密码2次是否一样
user=auth.authenticate(username=user,password=pre_pwd)
# 更改密码 #############################
if user:
user.set_password(new_pwd)
user.save()
return redirect("/login/") return render(request,"setpwd.html")

登陆验证系统实例-三种(cookie,session,auth)的更多相关文章

  1. ZYNQ入门实例——三种GPIO应用、中断系统及软硬件交叉触发调试

    一.前言 Xlinx的ZYNQ系列SOC集成了APU.各种专用外设资源和传统的FPGA逻辑,为ARM+FPGA的应用提供助力,降低功耗和硬件设计难度的同时极大提高两者间传输的带宽.之前在研究生课题中使 ...

  2. Android系统的三种分屏显示模式

    Google在Android 7.0中引入了一个新特性——多窗口支持,允许用户一次在屏幕上打开两个应用.在手持设备上,两个应用可以在"分屏"模式中左右并排或上下并排显示.在电视设备 ...

  3. linux系统的三种网络连接模式

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...

  4. CBV装饰校验的三种方式session

    代码如下: from django.shortcuts import render,HttpResponse,redirect from django.views import View # Crea ...

  5. 概念与用法-cookie,session,auth (认证系统)

    COOKIE 与 SESSION 概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...

  6. Django 认证系统 cookie & session & auth模块

    概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内容,浏 ...

  7. java获得当前系统时间三种方法

    参见: http://blog.csdn.net/cloume/article/details/46624637

  8. redhat系统下三种主要的软件包安装方法

    1. 通过RPM软件包来安装 RPM(Redhat Package Management)标准的软件包,只需简单地输入命令“rpm -ivh filename.rpm”即可: 如果需要对已经安装的RP ...

  9. django cookie,session,auth

    一.最完美的auth auth_user 是用来存储的用户注册的username,password auth 首先需要引入模块 from django.contrib import auth 用户认证 ...

随机推荐

  1. BZOJ 3698 XWW的难题:有上下界的最大流

    传送门 题意 给你一个 $ n*n $ 的正实数矩阵 $ A $ ,满足XWW性. 称一个 $ n*n $ 的矩阵满足XWW性当且仅当: $ A[n][n] = 0 $ 矩阵中每行的最后一个元素等于该 ...

  2. Ubuntu16.04 Kdevelop汉化及配置

    关闭Kdevelop sudo apt-get install kdevelop-l10n 再打开. 字体选择 Sans Serif :style:Normal:这样更舒服且不影响中文的排版,如何改成 ...

  3. web项目在iis配置好后不能正确访问问题集锦,以及IIS常规设置

    6.IIS配置好,项目无法访问,注意项目对应的应用程序池的net版本是否正确,是否集成(一般都是集成,很少是经典) 本项目用的4.0,可IIS默认程序池为2.0,将2.0改为4.0就行.   7.HT ...

  4. Linux文件夹权限详解

    - 第一个字符代表文件(-).目录(d),链接(l) - 其余字符每3个一组(rwx),读(r).写(w).执行(x) - 第一组rwx:文件所有者的权限是读.写和执行 - 第二组rw-:与文件所有者 ...

  5. mongodb之一些简单的增删改查语句

    数据库操作:show dbs;#查看数据库use test;#如果没有就创建一个db;#查看当前数据库db.dropDatabase();#删除数据库 数据操作:show collections:#查 ...

  6. split方法的使用

    // 分隔竖线 String[] param = text.split("\\|");   //分隔问号 String name = singleResource.get(&quo ...

  7. LeetCode OJ:Linked List Cycle(链表循环)

    Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...

  8. UI- 基础控件零散知识点回归

    1.frame\center\bounds 1> frame:能修改位置和尺寸 2> center:能修改位置 3> bounds:能修改尺寸(x\y一般都是0) 2.在.m中声明的 ...

  9. New Concept English three (37)

    28 words/minute 44 typing errors We have learnt to expect that trains will be punctual. After years ...

  10. Leetcode 1020. Number of Enclaves

    dfs或者bfs class Solution: def dfs(self, A, rows, cols, i, j): if not (0 <= i < rows and 0 <= ...