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自带的用户认证模块 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功 ...
随机推荐
- Problem C: 重复子串(string)
/* 一个性质? right集合中只有相邻的位置才会有用 那么考虑set启发式合并, 能够求出大概nlogn个有用的对 那么将这些对按照右端点排序, 查询也按照右端点排序就可以离线维护信息 然后需要维 ...
- pycharm 调试django项目时,debug断点没反应???
入门python.django框架时,使用pycharm断点调试时,发现打的断点没反应,不起作用!上网上稍微一查,90%的都差不多,需要新建一个python程序,重新配置一遍,的确可以成功! 操作链接 ...
- spring jdbc学习1
1.queryForObject - 其中的 RowMapper 指定如何去映射结果集的行, 常用的实现类为 BeanPropertyRowMapper - 使用 SQL 中列的别名完成列名和类的属性 ...
- Java语法 [开发环境搭建]
自行百度. https://www.baidu.com 自行必应 https://cn.bing.com
- equals的使用
源码:这里只是把Integer拿出来,String,Long 都一样 /** * Compares this object to the specified object. The result is ...
- German Collegiate Programming Contest 2018 A. Attack on Alpha-Zet
题目链接https://nanti.jisuanke.com/t/28852 题目大意是 h*w 的平面,每两个点有且仅有一条路径,类似于封闭的联通空间,然后在这h*w个点中选取(标记为1~N)N个点 ...
- Dart 基础重点截取 Dart 2 20180417
官网教程 https://www.dartlang.org/guides/language/language-tour dart是一个单线程的语言,没有多线程 Final and const If y ...
- 742. Closest Leaf in a Binary Tree查找最近的叶子节点
[抄题]: Given a binary tree where every node has a unique value, and a target key k, find the value of ...
- 解决 ora-28001 密码过期的处理办法
转载自:https://blog.csdn.net/pengyouchuan/article/details/12905623 操作步骤: $sqlplus / as sysdba ALTER PRO ...
- 每10秒执行定时任务-crontab
* * * * * /data/crontab.sh * * * * * sleep 10; /data/crontab.sh * * * * * sleep 20; /data/crontab.sh ...