DJANGO-天天生鲜项目从0到1-003-用户模块-登录
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习
https://www.bilibili.com/video/BV1vt41147K8?p=1
Django自带认证系统
1.authenticate(username=username, password=password)
校验输入的用户密码是否正确时,可使用django自带的authenticate方法,若正确,则返回user对象,否则返回None
from django.contrib.auth import authenticate
user = authenticate(username=username, password=password)
if not user:
self.content['errmsg'] = '用户名或密码不正确!'
return self.my_render(request, self.content)
# 判断是否激活
if user.is_active == 0:
self.content['errmsg'] = '用户未激活!'
注意:django2.0以后,若用户密码正确,但是用户未激活,则authenticate()也会返回None,需在settings中加上下面语句,则校验时不会限制必须激活
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.AllowAllUsersModelBackend']
2.login(request, user)/logout(request, user)
有些页面是需要用户登录后才能访问的,因此需要记录用户的登录状态
from django.contrib.auth import login, logout
#校验登录成功后
login(request, user)
该方法会把登录的session默认存储在数据表djangi_session中,session_key为服务器返回给浏览器的cookie,默认两周后过期
注意:用户登录之后
2.1 在view中可以直接通过request.user获取到登录的user对象,例:获取用户名request.user.username
2.2 除此之外,django还会直接把登录的user对象传给模板文件(而不需要我们再手动传一遍),例:
{% if user.is_authenticated %}
<div class="login_btn fl">
欢迎您:<em>{{ user.username }}</em>
<span>|</span>
<a href="{% url 'user:logout' %}">退出</a>
</div>
{% else %}
<div class="login_btn fl">
<a href="{% url 'user:login' %}">登录</a>
<span>|</span>
<a href="{% url 'user:register' %}">注册</a>
</div>
{% endif %}
3.login_required装饰器和LoginRequiredMixin类
有些页面登录后才能访问,因此进入页面时,view中首先要判断用户是否登录,若登录,则正常显示页面,若未登录,则一般重定向到登录页面,路径为settings.py中的设置LOGIN_URL
判断是否登录的三种写法:
3.1 原始方法 is_authenticated
重定向时,路径为settings.LOGIN_URL拼上next参数(get方法)
from django.conf import settings
from django.shortcuts import redirect def my_view(request):
if not request.user.is_authenticated:
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
# ...
3.2 装饰器 login_required,视图定义为def方法时使用
其中两个参数都可以不写,直接使用默认值,redirect_field_name表示重定向的参数名称,默认为next,login_url表示重定向的地址,默认为setting.LOGIN_URL的值,而setting.LOGIN_URL的值默认为'/accounts/login/'
from django.contrib.auth.decorators import login_required
@login_required(redirect_field_name='next',login_url='/accounts/login/')
def my_view(request):
...
3.3 LoginRequiredMixin,视图定义为class类时(官网翻译为通用视图)使用
在类视图中先继承LoginRequiredMixin类,下面可以重定义上述的两个参数,不定义则使用上述默认值
from django.contrib.auth.mixins import LoginRequiredMixin class MyView(LoginRequiredMixin, View):
login_url = '/login/'
redirect_field_name = 'redirect_to'
注意:在定义settings.LOGIN_URL(或login_url)时,一定要以反斜杠‘/’开头,这样重定向的地址才会在端口号后直接拼上login_url,否则重定向的地址为当前地址拼上login_url
修改CACHES和SESSION的存储后端
django-redis 基于 BSD 许可, 是一个使 Django 支持 Redis cache/session 后端的全功能组件.
安装django-redis
pip install django-redis
修改caches缓存设置
# django 缓存设置cache: 使用redis数据库当做缓存的存储位置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
修改session会话设置:
# django 会话设置session: 将session存储在缓存中(默认为数据表django_session中)
# 配合上面将缓存存在redis中,即可将session存在redis中
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
DJANGO-天天生鲜项目从0到1-003-用户模块-登录的更多相关文章
- django天天生鲜项目
.后台admin管理天天生鲜商品信息 models里 from django.db import modelsfrom tinymce.models import HTMLField #需要pip安装 ...
- DJANGO-天天生鲜项目从0到1-012-订单-用户订单页面
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-007-首页静态化与缓存
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- python 天天生鲜项目
python 天天生鲜项目 django版:https://github.com/Ivy-1996/fresh flask版:https://github.com/Ivy-1996/flask-fre ...
- Django之天天生鲜项目
准备工作 1.配置settings.py内置文件 注意: AUTH_USER_MODEL配置参数要在第一次迁移数据库之前配置,否则可能django的认证系统工作不正常 2.创建应用 3.配置主路由 一 ...
- DJANGO-天天生鲜项目从0到1-011-订单-订单提交和创建
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-010-购物车-购物车操作页面(勾选+删改)
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-009-购物车-Ajax实现添加至购物车功能
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-009-搜索功能实现(django-haystack+whoosh+jieba)
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-006-首页-内容展示
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
随机推荐
- Redhat FreeIPA Server 安装服务端和客户端 (实验:VMware环境下)
实验环境:windows7 + vmware 15 + redhat 71:准备2台虚拟机: 虚拟机VMnet8,Subnet IP:192.168.145.0 Redhat 7( ...
- webpack入门进阶(3)
1.11.预处理器文件处理 1.sass文件 sass这种css预处理器是以.scss结尾,需要用node-sass和sass-loader来处理 安装loader npm i node-sass s ...
- cp5200的一般步骤
cp5200的一般步骤: 1.创建数据对象 hObj = CP5200_CommData_Create(nCommType, id, GetIDCode()); 2.生成所需要的数据,如 :生成设置亮 ...
- EFCore-一对一配置外键小记2
前后两次遇到这样的错误: The property 'xx' on entity type 'xxxx' has a temporary value. Either set a permanent v ...
- IIS发布之后可能出现的问题集及解决方案
1,首先注意发布的net目标框架,和发布的服务器所使用的框架是否一致
- 119.杨辉三角II
这道题和第118题是一样的,需要注意这道题目对行数的要求 # 定义一个列表,用来存放数据 num_list = [] for index1 in ran ...
- Python3笔记001 - 1.1 python概述
第1章 认识python python语言特点 跨平台 开源的 解释型 面向对象 python语言的特点是:以对象为核心组织代码,支持多种编程范式,采用动态类型,自动进行内存回收,并能调用C语言库进行 ...
- Java源码详解系列(十)--全面分析mybatis的使用、源码和代码生成器(总计5篇博客)
简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository ...
- 单调栈之WYT的刷子
好久没更题解了(改题困难的我) 题目描述 WYT有一把巨大的刷子,刷子的宽度为M米,现在WYT要使用这把大刷子去粉刷有N列的栅栏(每列宽度都为1米:每列的高度单位也为米,由输入数据给出). 使用刷子的 ...
- 【经典DP】洛谷 P2782 友好城市
嘤嘤嘤,昨天两个文化课老师在上奥赛时招呼我(亲切交流),今天又要写工作报告,没时间写题解,希望今天能补上 友好城市 题目://洛谷那粘来的题面竟然能把格式粘过来 题目描述 有一条横贯东西的大河,河有笔 ...
