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
-
-
-
登陆之后的状态保持
用户退出
-
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'
-
-