django自带有session机制:
用户表,只要是继承的AbstractUser,就可以拥有这个session校验
【操作1】
随便在应用下新建sign_in_out.py ( 登录登出)
"""这个里的代码用来处理
登录和登出"""
from django.http import JsonResponse
from django.contrib.auth import authenticate, login, logout
# 登录处理
def signin(request):
# 从 HTTP POST 请求中获取用户名、密码参数
userName = request.POST.get('username')
passWord = request.POST.get('password')
# 使用 Django auth 库里面的 方法校验用户名、密码 (如果账号密码不对,或者is_active为0 就返回 None)
user = authenticate(username=userName, password=passWord)
if user is not None:
if user.is_superuser:
# django的登录方法
login(request, user)
# 在session中存入用户类型
request.session['usertype'] = 'mgr'
return JsonResponse({'ret': 0})
else:
return JsonResponse({'ret': 1, 'msg': '请使用管理员账户登录'})
else:
return JsonResponse({'ret': 1, 'msg': '用户名或者密码错误、或未激活'})
# 登出处理
def signout(request):
# 使用登出方法
logout(request)
return JsonResponse({'ret': 0})
配置url 和使用
【操作1里包含的知识点】
源码都在这里:from django.contrib.auth import authenticate, login, logout
- authenticate 可以用来校验用户表里有没有,如果返回为东西,则表示有数据且is_active为
- 否则 就返回 None
- login 登录方法(第二个参数是authenticate校验方法返回的用户对象):
- 登录成功后,会在django_session表中存一条数据
- 如下图,比如浏览器在admin页面登录,或用postman调接口只要触发了 auth中的login都会存
- 还可以自定义在session里面加东西 上图在sessionId中加了特殊类型后,后续业务接口可以进行判断,它是否登录还是未登录,具体的可以看 :实现登录 | 白月黑羽
【补充】
如果是浏览器登录,或postman登录后,浏览器和工具都自己会存一份sessionid