Django——用户认证和判断用户是否登录
用户认证
必须通过认证之后才能login(request,user)这样才能保存会话到request中,注销后会话结束
注意
- 自定义的用户登陆时只不止需要验证用户名和密码的需要写认证,就例如在线教育平台中需要通过邮箱或者用户名登录,自定义认证
views.py
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
class CustomBackend(ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
try:
user = UserProfile.objects.get(Q(username = username)|Q(email=username))
if user.check_password(password):
return user
except Exception as e:
return None
settings.py
AUTHENTICATION_BACKENDS= (
'users.views.CustomBackend',
)
还记得找回密码时说的用户未认证的错误吗,在后面的时候除了登录和判断用户是否登录其它的如添加数据的user用request.user就会出错哦
- 自定义的用户登陆时只需要验证用户名和密码的不需要写认证
++登录++
from django.contrib.auth import authenticate,login,logout
def UserLogin(request):
name = request.COOKIES.get('name')
if name:
return HttpResponseRedirect('/home')
if request.method == 'POST':
user_form = LoginForm(request.POST)
if user_form.is_valid():
username = user_form.cleaned_data.get('username')
password = user_form.cleaned_data.get('password')
# user = Profile.objects.filter(nick_name=username,password=password)
# =================认证开始====================
user = authenticate(username=username,password=password)
# =================认证结束====================
if user:
# =================登录====================
login(request,user)
#
response = HttpResponseRedirect('/home/')
response.set_cookie('name',username,60*60*24*1)
return response
# return render(request,'feedback.html')
# 这里直接写模版渲染,就不能设置cookie的过期时间了
return render(request,'login.html')
注销
def UserLogout(request):
logout(request)
return HttpResponseRedirect('/home/')
- 认证之后设置的会话过期时间会影响到登录的会话
request.session.set_expiry(40)
- 可以通过计算时间来解决结束部分会话
用户登录之后才能进行一些操作
一个简单原始的限制方法是检查 request.user.is_authenticated() ,然后重定向到登陆页面:
作为一个快捷方式, 你可以使用便捷的 login_required 修饰符:
views.py
from django.contrib.auth.decorators import login_required
# 需要登录之后才执行的函数上面可以加个@login_required
@login_required
def my_view(request):
# ......
settings.py 中需要指明装饰器的路径才能找到制定的登录函数
LOGIN_URL='/login/'
Django——用户认证和判断用户是否登录的更多相关文章
- 2-功能1:基于用户认证组件和Ajax实现登录验证(图片验证码)
1.登录页面的设计 (1)label标签的id属性 label标签的id属性,点击label标记,相当于点击了input框 bootstarp样式 class="form-group&quo ...
- MongoDB之【增加用户认证、增加用户、删除用户、修改用户密码、读写权限、只读权限】
说明:增加用户是针对数据库进行操作 1.进入到数据库 use dbname 2.针对当前数据库添加用户 权限是针对当前数据 1.添加并验证用户 > use admin > db.addUs ...
- Django会话,用户和注册之用户认证
通过session,我们可以在多次浏览器请求中保持数据, 接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要认证. 当然了,Django 也提供 ...
- 061.Python前端Django组件用户认证组件
一 auth认证组件 在使用pymysql,数据库迁移的时候.,默认生成有十张表如下 查看author_user表结构 mysql> desc auth_user; +------------- ...
- Django——Auth模块(用户认证模块)
1.Auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象. 而有了auth模块之后就可以很轻松的去验证用 ...
- django book用户认证学习
用户与Authentication 通过session,我们可以在多次浏览器请求中保持数据, 接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要 ...
- Django——用户认证
Django--用户认证 用户与Authentication(身份验证) Django 用户认证系统处理用户帐号,组,权限以及基于cookie的用户会话. 这个系统一般被称为 auth/auth (认 ...
- 深入一下Django的用户认证和cache
深入一下Django的用户认证和cache 用户认证 首先明白一个概念,http协议是无状态的,也就是每一次交互都是独立的,那如何让服务器和客户端进行有状态的交互呢,现在较为常见的方法就是让客户端在发 ...
- auth模块用户认证
一.auth模块什么 auth模块时django自带的用户认证模块 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功 ...
随机推荐
- eclipse常用快捷键整理
Ctrl + F11 按上次方式执行 Ctrl + Shift + / 加上注释/**/ Ctrl + Shift + \ 取消注释/**/ Ctrl + / 加上或消除行注释 Ctrl + D 删除 ...
- wepy打开页面首次不显示,但是数据已经有了
page页面首次打开异步数据无法通过props传递到子组件 解决:在开发者工具关闭上传代码时自动压缩就解决了,在wepy文档里也有强调
- postgresql模糊查询json类型字段内某一属性值
需求场景: 目录以jsonb格式存储在数据库表t的chapter字段中,需要菜单路径中包含指定字符串(比如“语文”或者“上学期”)的menu 以下为chapter字段存储json示例: { " ...
- spring 之 BeanDefinition & BeanDefinitionParser
xml bean factory 的解析过程的 堆栈大概是这样的: at org.springframework.beans.factory.xml.NamespaceHandlerSupport.f ...
- js跳转新窗口
语法:window.open(url,[target]); eg: window.open("index.html"); window.open("index.html& ...
- Java学习笔记(十三):package关键字
- AudiosessionSetActive
IOS audiosession 会话控制声音播放 今天遇到一个问题: 当我外部想要关闭声音播放的时候 audiosessionsetActive(false) 居然报错了,但是作用起了 AVAud ...
- Django的rest_framework的分页组件源码分析
前言: 分页大家应该都很清楚,今天我来给大家做一下Django的rest_framework的分页组件的分析:我的讲解的思路是这样的,分别使用APIview的视图类和基于ModelViewSet的视图 ...
- swift 分组tableview 设置分区投或者尾部,隐藏默认间隔高度
1.隐藏尾部或者头部,配套使用 //注册头部id tv.register(JYWithdrawalRecordSectionView.self, forHeaderFooterViewReuseIde ...
- 开启FIPS协议
Open the 'Run' menu by pressing the combination 'Windows Key + R'.Type 'secpol.msc' and press 'Enter ...