zoukankan      html  css  js  c++  java
  • Django用户认证

    1、cookie
      1、用户首次在地址栏访问页面,带空的cookie去,验证不通过,跳转到登录页面
      2、用户输入登录信息,发送给服务器,服务器验在用户表里验证用户存在后设置cookie,将设置
      的cookie返回给浏览器并保存,否则登录信息不正确返回错误提示
      3、用户再次访问其他页面时,带着保存的cookie,服务器验证cookie信息,显示用户已登录
      则允许访问,否则重定向到登录页面

    注:一个浏览器访问同一个服务器时会在django_session 表里生成一条记录
      多个浏览器访问同一个服务器时会在Django_session 表里生成多条记录
      覆盖:浏览器会保持最后的一次会话,覆盖前几次会话

    2 session
      1、第一次访问时携带一个空的cookie{},服务器验证不过跳转到登录页面
      2、用户首次输入登录信息,发送给服务器,服务器验在用户表里验证用户存在后设置cookie,
      服务器随机生成一个字符串,将随机字符串放入cookie里,并将随机字符串插入session_key 字段 ,
      将用户信息组成一个字典写入session_data字段
      3、将随机生成的字符串放入cookie里返回给浏览器,用户下次访问浏览器时会带着cookie{},根据随机字符串验证用户信息,若是
      同一个用户,验证通过,若是新的用户登录,会重新生成一个随机的字符串,覆盖之前的信息

    注:如果直接访问登录后的页面带着cookie,request.session执行三个步骤
      1、获取到随机字符串
      2、到Django_session 表过滤到session_key(随机字符串)
      3、取到对应的session_data 反序列化成数据字典 {"susername":"egon","slogin":True}

    上诉三步总结为一句代码为:data=request.session.get('slogin')

    然后:
    if not data:重定向到登录页面
    else:跳转到要访问的页面

    3、用户认证组件
    利用auth组件
        首先输入登录信息
      获取到用户信息
      通过auth模块到auth_user表去验证用户存在与否
      user_obj=auth.authenticate(username=user,password=pwd)
      if user_obj:
      保存用户信息到Django_session
      auth.login(user_obj) #将当前用户对象赋给request.user ,request.user 是全局变量以后在任何的方都可以使用request.user,
      #包括在HTML前端 如:{{request.user.username}}
      重定向到访问页面
        else:
      重定向到登录页面

    当未登录任何用户时,默认为匿名用户,其各项信息如下:
      request.user :默认匿名对象
      request.user.id : None
      request.user.username:''
      request.user.is_active:False

    当有用户登录时,可以通过request.user 获取到用户信息

    print(request.user.is_authenticated)
    匿名用户为False, 有用户登录为True

    最后用户认证组件登录:

     login登录认证

     1 def login(request):
     2     if request.method=='GET':
     3         #地址栏输入,GET请求
     4         return render(request,'login.html')
     5     else:
     6         #获取用户信息
     7         use=request.POST.get('usename')
     8         pwd=request.POST.get('pwd')
     9 
    10         #判断用户是否存在
    11         use_obj=auth.authenticate(username=use,password=pwd) # 把当前对象赋给request.user(全局变量)
    12         if use_obj:
    13             #保存用户信息
    14             auth.login(request,use_obj)
    15             #重定向
    16             return redirect('/app01/showbook/')

    最后在访问的页面加上认证:

    1     if not request.user.is_authenticated:
    2         return redirect('/app01/login/')

    用户注销

    def logout(request):
        #注销
        auth.logout(request)
        return redirect('/app01/login/')
  • 相关阅读:
    AGC012
    AGC010
    AGC010
    AGC010
    AGC010
    BZOJ2120
    python_way,day8 面向对象【多态、成员--字段 方法 属性、成员修饰符、特殊成员、异常处理、设计模式之单例模式、模块:isinstance、issubclass】
    python_way ,day7 面向对象 (初级篇)
    python_way.day7 模块(configparser,xml,shutil,subprocess)、面向对象(上)(创建类,类的构成,函数式编程与面向对象编程的选择,类的继承)
    python_way ,day5 模块,模块3 ,双层装饰器,字符串格式化,生成器,递归,模块倒入,第三方模块倒入,序列化反序列化,日志处理
  • 原文地址:https://www.cnblogs.com/liaopeng123/p/9891249.html
Copyright © 2011-2022 走看看