Django方法

本文详细介绍了Django框架中的用户认证流程,包括多用户登录、密码校验、状态保持及退出登录的方法。同时,讲解了如何实现自定义认证后端以支持多种登录方式,如用户名、手机号登录,并提供了QQ登录的配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django方法

  • render(request,“模板文件”, 模板变量的值)
    • 渲染模板文件 与 renter连用:渲染后并返回

    • 导包路径

      • from django.shortcuts import render
        
  • redirect(文件路径)
    • 重定向

    • 导包路径

      • from django.shortcuts import redirect
        

多用户登陆

  • authenticate(request, username = 用户名, password = 用户密码) ?
    • 认证用户登陆, **成功:**返回用户对象 **失败:返回None ?(可用于多用户登陆)**?

    • 导包路径

      • from django.contrib.auth import authenticate
        
  • ModelBackend ==> 类 ?**(可用于多用户登陆)**? ?
    • Django底层封装的认证后端的类,里面包含authenticate方法可用来认证用户的登陆。但是只能认证用户名和密码。

    • 如果需要多用户登陆则需要重写authenticate方法

      • 定义一个类。继承自ModelBackend,然后重写authenticate

      • 如需要添加手机号登陆,则重写为:

        • from django.contrib.auth.backends import ModelBackend
          from users.models import User
          
          class MeiduoModeBackend(ModelBackend):
              def authenticate(self, request, username=None, password=None, **kwargs):
                  # 变量username的值可以是用户名,也可以是手机号,需要判断,再查询
                  try:
                      # if re.match(r'^1[3-9]\d{9}$', username):
                      #     user = User.objects.get(mobile=username)
                      # else:
                      #     user = User.objects.get(username=username)
                      user = User.objects.get(username=username)
                  except:
                      try:
                          user = User.objects.get(mobile=username)
                      except:
                          return None
          
                      # return None
          
                  if user.check_password(password):
                      return user
                  else:
                      return None
          
          
          
    • 导包路径

      • from django.contrib.auth.backends import ModelBackend
        
    • 因为是底层封装重写,所以需要在Django的setting里进行配置

    • setting配置如下:

      • AUTHENTICATION_BACKENDS = ['重写的ModelBackend类的路径']
        # 指定认证后端   例子:
        AUTHENTICATION_BACKENDS = ['meiduo_mall.utils.authenticate.MeiduoModeBackend']
        
    • 注意:

      • 重写authenticate方法后视图函数内用于判断用户是否登陆的authenticate方法的导包路径不可更改。依然是:

        • from django.contrib.auth import authenticate
          

登陆之后的状态保持

  • login(request,user)
    • 登陆用户的状态保持 ?**(可用于用户登陆之后的状态保持)**?

    • 导包路径

      • from django.contrib.ayth import login
        

用户退出

  • logout(request)

    • 删除用户状态保持 ?**(可用于退出登陆之后的删除用户保持,本质就是删除sesson。记得删除cookie)**?

    • 导包路径

      • from django.contrib.ayth import login
        
        
  • delete_cookie(“cookie的键”)
    • 删除cookie ?**(可用于删除用户退出之后,在浏览器里保持的cookie)**?

    • 示例代码

      • # 清理session
        logout(request)
        # 退出登录,重定向到登录页
        response = redirect(reverse('contents:index'))
        # 退出登录时清除cookie中的username
        response.delete_cookie('username')
        
        

校验用户登陆密码

  • check_password(原始密码)
    • 将原始密码进行加密并与数据库里的加密密码进行比较 ?**(可用于判断用户输入密码的有效性)**?

    • 例:

      • # 将用户输入的password进行加密
        # 然后与user对象的密码进行比较
        user.check_password(password)
        
        

判断用户是否登陆

  • request.user
    • request对象的属性user-------->没登陆则是匿名用户对象,登录之后则是实际的用户对象

    • **is_authenticated:request.user的属性。?(用来判断用户是否登陆)**? 登陆返回True ?

  • login_required 装饰器 ?
    • django封装的用以判断用户是否的登陆的装饰器

    • 导包路径

      • from django.contrib.auth.decorators import login_required
        
        
    • 注意

      • 如果是未通过登陆验证则会被重定向到LOGIN_URL配置项指定的地址,所以需要到django的setting里设置重定向的路径

        • 配置如下:

        • LOGIN_URL = '重定向的登陆路由地址'
          # 指定装饰器重定向页面
          LOGIN_URL = '/login/'
          
          

QQ登陆

  • settings
    • Django内部封装的函数。可以通过settings.setting里的变量名的方式获取setting.py里的值 ?**(可用于QQ登陆时,获取django中setting.py设置的回调路由)**?

    • 导包路径

      • from django.conf import settings
        
        
    • QQ登陆在setting中设置的参数

      • QQ_CLIENT_ID = '101518219'
        QQ_CLIENT_SECRET = '418d84ebdc7241efb79536886ae95224'
        QQ_REDIRECT_URI = 'http://www.meiduo.site:8000/oauth_callback' 
        
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值