django 从零开始 8 用户登录验证 待测
看文档 djang 自带一个用户登录验证的方法,不过有些看着懵逼,去网上找了一圈,发现很多都是照抄文档说明的,几乎没说啥原理 ? 特别是? from django.contrib.auth import authenticate 都说这个方法是,不过貌似文档中说的是使用django自带的模型可以对用户登录做一个验证, 但是业务需求不需要,不可能使用django的user模型? 通常都是自定义 ? 所以自定义一个用户模型 class User(models.Model): class Meta: db_table = ‘user‘ username = models.CharField(max_length=20,null=True,unique=True) password = models.CharField(max_length=128) create_date = models.DateTimeField(auto_now_add=True) 有usernam和password两个属性 同时在sessting中指定用户登录验证模型是哪一个,不指定则会使用django默认的用户登录验证表去进行一个验证...? 没有在这个模型存入,玩个锤子验证哦 AUTH_USER_MODEL = ‘user.User‘ #app名字.表名字 不过 貌似django也自带一个session会话保存数据库表... 只要进行了登录验证 也会保存在django_session表中,貌似可以在settings中可以关掉,但是不会到过期时间自动清除(默认30天),而是一直保存在表中 from django.contrib.auth import authenticate,login def login_auth(request): # 如果用户登录还想再次访问login,验证cookes中含有is_login字段则将返回index页面 if request.COOKIES.get(‘is_login‘): return redirect(reverse(‘user:index‘)) if request.POST.method == ‘POST‘: # 在前端页面自己写一个loginform登录框 username = request.POST.get(‘username‘) password= request.POST.get(‘password‘) # 会往指定模型中寻找含有该字段的数据数据,如果存在该实例 继续往下 user = authenticate(username=username,password=password) if user: # from django.contrib.auth.decorators import login_required # 看源码可知 将查询到的用户实例的 pk (id) 加入session中 使用login_required 来判断是否为登录用户 # 还可以使用 request.user.is_authenticated 查看登录用户其他属性 login(request,user) # 防止登录用户进入 request.COOKIES[‘is_login‘] = True # 得到cookies之前进行跳转登录前的页面 next = request.COOKIES.get(‘next‘) if next: return redirect(reverse(next)) return redirect(reverse(‘user:index‘)) return render(request,‘user/login.html‘) ? 其中源码还对request.user 进行了一个属性设置 可以用request.user.is_authenticated 对其该用户验证为登录用户,html模板中也能使用??? ? ? 退出使用logout from django.contrib.auth import logout def logout(request): logout(request) return redirect(reverse("user:index")) ? 对用户登录视图验证 from django.contrib.auth.decorators import login_required @login_required def xxx(): pass ? ? ? ? ? 如果不想这种办法也不想将session保存在数据库中,将login替换 ? 可以将用户一些不太重要的数据以字符串字典 request.COOKES[‘user‘]="user_id:%s" user.id 保存在cookies中(用户名或者id主键),?使用可逆推加密算法进行一个加密 ? 如果用户请求,进行一个解密,如果含有user字段,并该字段中含有user_id user = request.COOKES.get(‘user‘) if user: # 进行你的解密得到记过 user的values值 ? ? ? 引用?https://www.cnblogs.com/guoguojj/p/8607951.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |