本项目基于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-用户模块-登录的更多相关文章

  1. django天天生鲜项目

    .后台admin管理天天生鲜商品信息 models里 from django.db import modelsfrom tinymce.models import HTMLField #需要pip安装 ...

  2. DJANGO-天天生鲜项目从0到1-012-订单-用户订单页面

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  3. DJANGO-天天生鲜项目从0到1-007-首页静态化与缓存

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  4. python 天天生鲜项目

    python 天天生鲜项目 django版:https://github.com/Ivy-1996/fresh flask版:https://github.com/Ivy-1996/flask-fre ...

  5. Django之天天生鲜项目

    准备工作 1.配置settings.py内置文件 注意: AUTH_USER_MODEL配置参数要在第一次迁移数据库之前配置,否则可能django的认证系统工作不正常 2.创建应用 3.配置主路由 一 ...

  6. DJANGO-天天生鲜项目从0到1-011-订单-订单提交和创建

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  7. DJANGO-天天生鲜项目从0到1-010-购物车-购物车操作页面(勾选+删改)

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  8. DJANGO-天天生鲜项目从0到1-009-购物车-Ajax实现添加至购物车功能

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  9. DJANGO-天天生鲜项目从0到1-009-搜索功能实现(django-haystack+whoosh+jieba)

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  10. DJANGO-天天生鲜项目从0到1-006-首页-内容展示

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

随机推荐

  1. JavaWeb网上图书商城完整项目--23.注册页面之html实现

    我们来分析下这个页面的代码如何实现: 我们来分下下层次结构: 1.首先最外层是一个大的div,然后又包括两个小的div,第一个div中包括一个span,第二个div是一个table表 我们来看程序的代 ...

  2. android 抓取native层奔溃

    使用android的breakpad工具 使用这个工具需要下载Breakpad的源码,然后进行编译,编译之后会生成两个工具 我们使用这两个工具来解析奔溃的位置.这里我们可以下载已经编译好的工具 下载地 ...

  3. 入门大数据---Spark_Transformation和Action算子

    一.Transformation spark 常用的 Transformation 算子如下表: Transformation 算子 Meaning(含义) map(func) 对原 RDD 中每个元 ...

  4. windows虚拟机安装mac

    在虚拟机上安装mac 首先参考这个:http://jingyan.baidu.com/article/7f41ecec039936593d095c87.html 如果完成不了,请参看下面的.     ...

  5. Jquery中$(document).ready()

    window.onload = function(){ alert("welcome"); } 语句的作用是希望在页面加载完,自动执行定义js代码(function). $(doc ...

  6. JavaScript基础避免隐式的类型转换(004)

    JavaScript在普通对比运算符“==”执行时可能会进行隐式的类型转换.比如:false==0和""==0的结果都是true.同理也适合于"!="运算符.要 ...

  7. 《UNIX环境高级编程》(APUE) 笔记第十二章 - 线程控制

    12 - 线程控制 GitHub 地址 1. 线程限制 下图为与 线程操作 有关的一些 限制: 可以通过 sysconf 函数进行查询 . 2. 线程属性 可使用 pthread_attr_t 结构修 ...

  8. 一.8.django权限管理/drf权限管理

    1.什么是权限管理: .权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源 .权限管理好比如钥匙,有了钥匙就能把门打开,但是权限设置是有级别之分的,假如这个系 ...

  9. 关于SQL SERVER 的日期格式化

    --日期格式化Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select CONVERT(varchar(100), G ...

  10. 【.NET Core】在Win10中用VS Code debug

    虽然windows平台中有功能丰富且强大的Visual Studio,但有时也稍显臃肿,不如VS Code(vsc)小巧便捷,废话不多说,直接进入正题 前提 .NET Core RC2 X64系统 W ...