我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。

  Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了auth模块的来实现强大的用户认证系统,默认使用 auth_user表来存储用户数据。

auth模块

from django.contrib import auth

方法

  • create_user

    创建新用户。

    from django.contrib.auth.models import User
    user = User.objects.create_user(username = 'admin', password = '')
  • create_superuser

    创建超级用户。

    from django.contrib.auth.models import User
    User.objects.create_superuser(username='admin88', password='', email='zze46@foxmail.com')
  • authenticate

    用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。

    如果认证成功(用户名和密码正确有效),便会返回一个 User 对象, 并且会在该User对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。

    user = auth.authenticate(username='admin88',password='')
  • login

    用户登录,它本质上会在后端为该用户生成相关session数据。该函数接受一个HttpRequest对象,以及一个经过认证的User对象。

    from django.contrib.auth import authenticate, login
    
    def view_login(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
    login(request, user)
  • logout

    该函数接受一个HttpRequest对象,无返回值。 当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。

    from django.contrib.auth import logout
    
    def view_logout(request):
    logout(request)
  • is_authenticated

    判断当前请求是否通过了认证。

    def my_view(request):
    if not request.user.is_authenticated():
    ...
  • login_requierd

    auth模块提供的一个装饰器,用来的给某个视图添加登录校验。

    from django.contrib.auth.decorators import login_required
    
    @login_required
    def my_view(request):
    ...

    若用户没有登录,则会跳转到django默认的登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。

    如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。

    LOGIN_URL = '/login/'  # 这里配置成你项目登录页面的路由
  • check_password

    检查密码是否正确,需要提供当前请求用户的密码。密码正确返回True,否则返回False。

    is_ok = user.check_password('')
  • set_password

    修改密码,接收要设置的新密码作为参数。注意:设置完一定要调用用户对象的save方法才会生效!

    user.set_password(password='123')
    user.save()

补充

User内置属性

username:
用户名。
is_staff:
是否是超级用户。
is_active :
是否是激活状态(非激活状态不能登录)。

扩展默认的auth_user表

  • 创建自定义User模型

    from django.contrib.auth.models import AbstractUser
    class UserInfo(AbstractUser):
    """
    用户信息表
    """
    nid = models.AutoField(primary_key=True)
    phone = models.CharField(max_length=11, null=True, unique=True) def __str__(self):
    return self.username
  • 配置默认User表

    AUTH_USER_MODEL = "app名.User表名"

    注意:一旦我们在认证系统指定了新的用户表,我们就需要重新在数据库中创建该表,而不能继续使用原来默认的auth_user表了。

最新文章

  1. 字符串常量演示Demo
  2. 基于swift语言iOS8的蓝牙连接(初步)
  3. 触发UIButton长按事件
  4. c#基础: NetWorkStream类的主要属性
  5. php 父类调用子类方法和成员
  6. Spring MVC框架搭建
  7. iOS开发-OC语言 (五)字典
  8. zTree模糊查询人员姓名:getNodesByParamFuzzy
  9. php Redis常用命令
  10. Spring 基于set方法的依赖注入
  11. Eclipse neon 4.6 安装tomcat
  12. JavaScript之radio遍历
  13. python全栈开发day48-jqurey自定义动画,jQuery属性操作,jQuery的文档操作,jQuery中的ajax
  14. javaweb三大框架和MVC设计模式
  15. DeployMan,发布文件的利器
  16. Oracle 12C -- clone a remote pdb
  17. [开源项目-MyBean轻量级配置框架] 使用MyBean快速搭建分模块的应用程序(主页面的TAB)(DLL-MDI)
  18. logstash通过redis收集日志
  19. 【LeetCode】97. Interleaving String
  20. [Luogu 3958] NOIP2017 D2T1 奶酪

热门文章

  1. [k8s]k8s的控制层kubelet+docker配合调度机制(k8架构)
  2. 解决Protobuf生成的C#代码命名不规范问题
  3. HashMap中capacity、loadFactor、threshold、size等概念的解释<转>
  4. hdoj:2080
  5. 加载所有jar包下指定文件
  6. linux清理日志脚本
  7. MySQL的SQL预处理(Prepared)
  8. hbase region still in transition
  9. spring和jdbctemplate
  10. python中print(obj) 与sys.stdout.write()的区别