在settings.py中配置LOGIN_URL参数:

# 用户访问带有(@login_required)标签的页面(view)时,如果没有登录,就会跳转到LOGIN_URL(即登陆url)。
LOGIN_URL = '/login/'

使用django自带的auth模块进行登录和退出:

from django.contrib.auth.models import User
from django.contrib import auth
from django.http.response import HttpResponseRedirectBase
from django.shortcuts import resolve_url
# 重新重定向,修改状态码,由302(临时重定向)->401(未授权),方便前端fetch捕获
class HttpResponseRedirect401(HttpResponseRedirectBase):
status_code = 401
def redirect401(to, *args, **kwargs):
redirect_class = HttpResponseRedirect401
return redirect_class(resolve_url(to, *args, **kwargs))
def login(request):
# 统一登录的token解析,只要可以解析,就证明登录成功  
token = request.GET.get('token', 'default')
if token != 'default':
user_info = decrypt_by_default_public_key(token)
# if user_info:
user_name = user_info.get('userName')
user_email = user_info.get('loginId')
# 返回的时间:51050年
# time = user_info.get('time')
# year is out of range
# print(datetime.datetime.fromtimestamp(time)) if User.objects.filter(username=user_name):
pass
else:
# 必须有password字段,随便给一个密码;使用create_user,会对密码hash,不可以使用create函数
User.objects.create_user(username=user_name, password='test', email=user_email)
user = auth.authenticate(username=user_name, password='test')
auth.login(request, user)
request.session['user'] = user_name
# 登录之后重定向到欢迎界面,无法重定向到用户原本请求的页面,因为前端请求的url和代理后到后端的url不一致。
return redirect("/")
else:
# return redirect401(JANUS_LOGIN)
_next = request.GET.get('next', 'default')
if _next != 'default':
return redirect401(JANUS_LOGIN)
return redirect(JANUS_LOGIN) def logout(request):
auth.logout(request)
# 重定向到统一退出地址
return redirect(JANUS_LOGOUT)

使用login_required校验用户是否登录

from django.contrib.auth.decorators import login_required
from django.views.decorators.csrf import csrf_exempt

logger = logging.getLogger(conf.get('log', 'name'))

@login_required
# 添加csrf例外;支持post、get、delete、put、patch等方法
@csrf_exempt
def hello(request):
content = {'hello': 'hello world'}
# return HttpResponse("hello world")
logger.error('test')
logger.error('访问hello界面:error')
logger.debug('访问hello界面:debug')
logger.info('访问hello界面:info')
logger.warning('访问hello界面:warning')
logger.critical('访问hello界面:critical')
logger.log(, '测试')
logger.exception('ceshi')
return render(request, 'hello.html', content)

参考:

https://www.cnblogs.com/xuchengcheng1215/p/9457950.html

https://www.cnblogs.com/tangpg/p/9074418.html

https://www.cnblogs.com/xuchengcheng1215/p/9457950.html

django的权限认证:登录和退出。auth模块和@login_required装饰器的更多相关文章

  1. Django内置auth模块中login_required装饰器用于类视图的优雅方式

    使用多继承 以及类似java中的静态代理模式 原理:OrderView.as_view()根据广度优先,调用的是LoginRequiredMixin中的as_view(cls, *args, **kw ...

  2. Django之Cookie Session详解,CBV,FBV登陆验证装饰器和自定义分页

    Cookie Session和自定义分页   cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接 ...

  3. Django的内置登录、退出、修改密码方法

    Django中内置的登录.退出.修改密码方法. 1.url.py中使用django.contrib.auth中的views函数,django.views.generic中的TemplateView函数 ...

  4. Django 认证系统 cookie & session & auth模块

    概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内容,浏 ...

  5. django基础 -- 4. 模板语言 过滤器 模板继承 FBV 和CBV 装饰器 组件

    一.语法 两种特殊符号(语法): {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二.变量 1. 可直接用  {{ 变量名 }} (可调用字符串, 数字 ,列表,字典,对象等) ...

  6. django实现用户注册、登录、退出

    视图 from django.contrib import auth from django.contrib.auth.models import User from django.views.dec ...

  7. Django之auth模块用户认证模块

    一.Auth模块 1)auth模块是什么.登录后台使用的账号密码,则就是使用的auth模块创建的表 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站 ...

  8. django使用auth模块进行身份认证

    https://docs.djangoproject.com/zh-hans/2.0/topics/auth/default/#authentication-in-web-requests djang ...

  9. python3开发进阶-Django框架的自带认证功能auth模块和User对象的基本操作

    阅读目录 auth模块 User对象 认证进阶 一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其 ...

随机推荐

  1. Linux下安装matlab2014a

    下载Matlab 我放在百度云盘里了,下载链接: http://pan.baidu.com/s/1pLE1qgr 密码: x4tw 该文件下载解压后如下所示:该文件下载解压后如下所示: 注意linux ...

  2. org.apache.maven.archiver.MavenArchiver.getManifest错误

    eclipse导入新的maven项目时,pom.xml第一行报错: org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.mav ...

  3. 001.DHCP简介

    一 DHCP概念 DHCP指动态主机配置协议,是一个局域网的网络协议,使用UDP协议工作. 二 应用 为大量客户机自动分配地址,提供集中管理 减轻管理和维护成本,提高网络配置效率 三 分配的主要信息 ...

  4. SpringMVC框架05——拦截器

    1.拦截器概述 Spring MVC的拦截器(Interceptor)与Java Servlet的过滤器(Filter)类似,它主要用于拦截用户的请求并做相应的处理,通常应用在权限验证.记录请求信息的 ...

  5. odoo 工作流

    odoo工作流 介绍 新版本的odoo开始减少workflow的使用,推荐使用workflow-ish的方式来处理工作流过程 很多模块中还是使用到工作流,这里我记录一个简单的实例,欢迎大家给出建议. ...

  6. k8s+Jenkins+GitLab-自动化部署asp.net core项目

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 此文阅读目录: 1.闲聊 ...

  7. Ubuntu 编译安装 nDPI

    1.安装gcc 和 build-essential sudo apt-get install gccsudo apt-get install build-essential 2.安装必要的软件 sud ...

  8. Luogu1445 [Violet]樱花 ---- 数论优化

    Luogu1445 [Violet]樱花 一句话题意:(本来就是一句话的) 求方程 $\frac{1}{X} + \frac{1}{Y} = \frac{1}{N!}$ 的正整数解的组数,其中$N \ ...

  9. android 获取sd卡根目录

    dir:/storage/emulated/0 也就是 sdcard目录 ====== android 获取sd卡根目录 public String getSDPath(){        File ...

  10. VMware 使用本机代理上网

    灰机使用方法 VMware 安装方法 首先解决主机的配置 1.查询本机 IP 地址,使用 ipconfig /all 2.更改小灰机的设置 3.虚拟机设置 4.Ubuntu 设置