购物车登录
1.jwt token
import jwt,datetime
from day5 import settings
# 生成jwttoken
# 这里的user是继承自登录视图生成的user
def gennerate_jet_token(user):
# 要加密的数据 字典
payload = {
'id':user.id,
'username':user.username,
'mobile':user.mobiles
# 'exp':datetime.datetime.now() + datetime.timedelta(seconds=300),
}
# 进行加密,生成jwt token
# payload 负载 algorithm 运算法则
token = jwt.encode(payload=payload,key=settings.SECRET_KEY,algorithm='HS256')
# 返回token
return token
2.登录
class Login(APIView):
def post(self,request):
# 获取用户名,密码
username = request.data.get('user')
pwd = request.data.get('pwd')
# 读取数据库中的用户信息
try:
# 判断用户是否存在
# 多方式登录
from django.db.models import Q
user =User.objects.get(Q(username=username)|Q(mobiles=username))
except Exception as e:
print(e)
return Response({"code":204,'msg':'用户不存在'})
# 判断密码正确
# check_password校验密码,是继承模型类才有的的方法
if not user.check_password(pwd):
return Response({"code":204,'msg':'密码不正确'})
# 返回正确
# 生成用户的jwt token
token = gennerate_jet_token(user)
return Response({
'code':200,
'msg':'用户%s登录成功'%user.username,
'token':token, # 添加token字段
# 字典类型
'user':{
'userName':user.username,
'uid':user.id
}
})
亲端
#登录时密码是在前端判断的,点击登陆时,将账号和密码传到后端进行验证
Login() {
// 通过element自定义表单校验规则,校验用户输入的用户信息
this.$refs["ruleForm"].validate(valid => {
//如果通过校验开始登录
if (valid) {
// 发送ajax
this.$axios.post("/users/login/", {
user: this.LoginUser.name,
pwd: this.LoginUser.pass,
})
.then(res => {
console.log("@@登录的响应:", res)
if (res.data.code == 200) {
// res.data为后端响应的json
// 隐藏登录组件
this.isLogin = false;
// 登录信息存到本地缓存
// 先转化为json类型
let user = JSON.stringify(res.data.user);
localStorage.setItem("user", user); // 内存存储json数据
console.log("@@user", user)
//转化为json类型 // 保存jwt token信息
let token= JSON.stringify(res.data.token);
localStorage.setItem("token", token)
// console.log("@@res.data.user", res.data.user)
this.setUser(res.data.user); //vuex存储对象
this.notifySucceed(res.data.msg);
//跳转页面
this.$router.push({path:'/profile'})
} else {//响应不是200
// 清空输入框的校验状态
this.$refs["ruleForm"].resetFields();
// 弹出通知框提示登录失败信息
this.notifyError(res.data.msg);
}
})
.catch(err => {
console.log(err)
return Promise.reject(err);
});
} else {//未通过用户校验
return false;
}
});
}
版权声明:本文为weixin_68919548原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。