一、用户认证组件auth介绍

二、auth_user表添加用户信息

三、auth使用示例

四、auth封装的认证装饰器

一、用户认证组件auth介绍

解决的问题:

之前是把is_login=True放在session里来判断用户是否登录
之前的操作,在覆盖的时候有问题。
例如两个用户先后登录,第一个用户key-value比较多,第二个key-value少,覆盖后可能会保留有第一个的key-value

能做的事:1,验证用户名密码是否正确  2、判断用户是否已登录,用session保存用户登录状态

用户认证组件的前提:
功能:用session记录登录验证状态(不记录上次登录时间那些)
前提:不能用自己的用户表了。账号密码要放在Django自带的auth_user用户组件认证表。
不妨碍扩展其他字段。用这个表和其他表做一对一,一对多等

二、auth_user表添加用户信息

创建超级用户:python manage.py createsuperuser

创建普通用户:python manage.py createuser

三、auth使用示例

API
封装在auth模块中了:

--------------------------------------------------

from django.contrib import auth
def login(request):
  user=request.POST.get("user")
  pwd=request.POST.get("pwd")
    # 验证用户名密码是否正确
    # 如果验证通过返回user对象,不通过返回None
    # PS:可以自己来吗?from django.contrib.auth.models import User
    # 不得行,因为密码是加了密的,而且没必要干重复的事
  user=auth.authenticate(username=user,password=pwd)
  if user:
    # 如果验证通过,就注册登录信息
    auth.login(request, user)
    # 一旦注册session,把这个就变成了request.user
    # 在所有的视图函数和模板(模板里不用传都能用)都可以直接使用request.user
    # request.user表示当前登录对象 request.user==user
    # 没有登录是匿名对象,AnonymousUser,
      # request.user.is_anonymous或request.user.id==None
      #或request.user.user==''或request.user.is_authenticated 来判断用户是否登录

---------------------------------------------------------

注册用户

def reg(request):
  user=request.POST.get("user")
  pwd=request.POST.get("pwd")
  User.objects.create_user(username=user,password=pwd)    # 还有create_superuser方法,密码入库是加密的
  #改密码
  user = User.objects.get(username='')
  user.set_password(password='abc')
  user.save()

--------------------------------------------------------

总结:
from django.contrib import auth
1.验证登录:user=auth.authenticate(username=user,password=pwd)
2.注册登录:user=auth.login(request, user)
3.注销:auth.logout(request)

4.是否已经登录:request.user.is_authenticated
5.添加用户:User.objects.create_user(username=user,password=pwd)

PS:
request.user是一个全局变量。可以在视图中使用,在模板中不用传参可以直接用
补充:
如果是匿名用户对象:
request.user.is_anonymous==True
request.user.id==None
request.user.user==''

四、auth封装的认证装饰器

比如很多视图函数都要  “已经登录才能访问”的要求
可以用Django自带的装饰器解决 @login_required
不认证跳转到LOGIN_URL="/login/"是自己在settings.py里配的
但实际跳转是到:127.0.0.1:8000/login/?next=/order/
所以在视图函数中:
登录成功应该重定向到return redirect(request.GET.get("next","/index/"))

@login_required
def order(request):
  # if not request.user.is_authenticated:
    # return redirect("/login/")
  return render(request,"order.html")

Django--用户认证组件auth(登录用-依赖session,其他用)的更多相关文章

  1. Django之路——11 Django用户认证组件 auth

    用户认证 auth模块 1 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1.1 .authenti ...

  2. web框架开发-Django用户认证组件

    可以用认证组件做什么 针对session的缺陷, 跟新数据时,不跟新key键, 用户认证组件是删除后再重建 用户认证组件很多功能可以直接使用 利用用户认证表(auth_user,通过Django自己创 ...

  3. 10.Django用户认证组件

    用户认证组件: 功能:用session记录登录验证状态: 前提:用户表,django自带的auth_user 创建超级用户:python manage.py createsuperuser       ...

  4. Django用户认证组件

    用户认证 主要分两部分: 1.auth模块   from django.contrib import auth 2.User对象 from django.contrib.auth.models imp ...

  5. django——用户认证组件

    用户认证 auth模块 1 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1.1 .authenti ...

  6. Django 学习之用户认证组件auth与User对象

    一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个. 1 .authenticate() ...

  7. Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API

    用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...

  8. django的用户认证组件

    DataSource:https://www.cnblogs.com/yuanchenqi/articles/9064397.html 代码总结: 用户认证组件: 功能:用session记录登录验证状 ...

  9. 06 django的用户认证组件

    1.用户认证组件 用户认证组件: 功能:用session记录登录验证状态 前提:用户表:django自带的auth_user 创建超级用户: python3 manage.py createsuper ...

随机推荐

  1. solr之环境配置三

    配置安装Solr到Tomcat 1. 解压 solr4.7.2.zip 2. 将 solr-4.7.2\dist\solr-4.7.2.war拷贝到 apache-tomcat-7.0.55\weba ...

  2. HBase2实战:HBase Flink和Kafka整合

    1.概述 Apache官方发布HBase2已经有一段时间了,HBase2中包含了许多个Features,从官方JIRA来看,大约有4500+个ISSUES(查看地址),从版本上来看是一个非常大的版本了 ...

  3. Spring Boot2.0:使用Docker部署Spring Boot

    一.Spring Boot项目添加 Docker 支持1.在pom.xml中添加 Docker 构建插件 <plugins> <!-- Docker maven plugin --& ...

  4. C语言数组操作和指针操作谁更高效

    在上一篇博文  代码优化小技巧(持续更新......) 第三条关于数组和指针谁更高效, 意犹未尽, 决定单独拉出一篇来讲 1. 数组和指针操作对比 #include <stdio.h> i ...

  5. leetcode — same-tree

    import java.util.Stack; /** * Source : https://oj.leetcode.com/problems/same-tree/ * * * Given two b ...

  6. 用StyleCop规范团队代码

    前言 编码风格,每个人都是有不同的特点,风格各异,而且一个人在不同的时期,编码风格的差异也可能是非常大的,好比学生时代,刚工作的时候,工作一段时间后等. 在一个团队中,或一个项目中,如果出现了N种风格 ...

  7. Docker中安装WordPress

    前言 虚拟化技术风靡一时,还不层在生产环境中实践.只能是闭门造车,自己玩一玩了,接触了一下docker最简单的命令,这才自己搭建一个wordpress玩一玩. 安装wordpress之前先把本机的do ...

  8. mongodb学习(入门。。。。。)

    db.xs.insert({name:zhangsan})   db:当前数据库  xs:学生集合(没有的话自动创建) show collections   显示当前数据库的集合名字 show dbs ...

  9. MVC+angularjs

    angularjs可以解决开发人员不擅长HTML的问题,采用模块化配置,但是不支持样式的微调和修改 angularjs+MVC开发的协同办公平台,贴下图 编辑页面+附件 列表页 一个页面涉及另一个子表 ...

  10. C# 在PDF中绘制动态图章

    我们知道,动态图章,因图章中的时间.日期可以动态的生成,因而具有较强的时效性.在本篇文章中将介绍通过C#编程在PDF中绘制动态图章的方法,该方法可自动获取当前系统登录用户名.日期及时间信息并生成图章. ...