django的权限认证:登录和退出。auth模块和@login_required装饰器
在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装饰器的更多相关文章
- Django内置auth模块中login_required装饰器用于类视图的优雅方式
使用多继承 以及类似java中的静态代理模式 原理:OrderView.as_view()根据广度优先,调用的是LoginRequiredMixin中的as_view(cls, *args, **kw ...
- Django之Cookie Session详解,CBV,FBV登陆验证装饰器和自定义分页
Cookie Session和自定义分页 cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接 ...
- Django的内置登录、退出、修改密码方法
Django中内置的登录.退出.修改密码方法. 1.url.py中使用django.contrib.auth中的views函数,django.views.generic中的TemplateView函数 ...
- Django 认证系统 cookie & session & auth模块
概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内容,浏 ...
- django基础 -- 4. 模板语言 过滤器 模板继承 FBV 和CBV 装饰器 组件
一.语法 两种特殊符号(语法): {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二.变量 1. 可直接用 {{ 变量名 }} (可调用字符串, 数字 ,列表,字典,对象等) ...
- django实现用户注册、登录、退出
视图 from django.contrib import auth from django.contrib.auth.models import User from django.views.dec ...
- Django之auth模块用户认证模块
一.Auth模块 1)auth模块是什么.登录后台使用的账号密码,则就是使用的auth模块创建的表 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站 ...
- django使用auth模块进行身份认证
https://docs.djangoproject.com/zh-hans/2.0/topics/auth/default/#authentication-in-web-requests djang ...
- python3开发进阶-Django框架的自带认证功能auth模块和User对象的基本操作
阅读目录 auth模块 User对象 认证进阶 一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其 ...
随机推荐
- Win10解决无法访问其他机器共享的问题
Win10解决无法访问其他机器共享的问题 你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问.这些策略可帮助保护你的电脑免受网络上不安全设备或恶意设备的威胁. 管理员身份执 ...
- 基于ETL技术的数字化校园共享数据中心设计
摘要:数据的抽取.转换与加载(ETL)是数据整合的核心过程.在分析高校信息化建设现状基础上,以建立数字化校园.整合数据资源.实现数据共享为目标,提出以ETL为基础建立共享数据中心实现数据整合的方案.介 ...
- android 调试Installation failed with message INSTALL_FAILED_USER_RESTRICTED: Install canceled by user.
真机调试 遇到的问题 在使用真机调试的程序的时候出现了这个问题. 解决方法如下
- linux安装project lemon测评机
(写下备用) 机子:xubuntu 16.04 LTS 1.下载lemon github地址:https://github.com/Sojiv/Project_lemon 这里download zip ...
- Javascript 严格模式use strict详解
1.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. ...
- Xtreme8.0 - Kabloom dp
Xtreme8.0 - Kabloom 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/kablo ...
- How Visual Studio 2012 Avoids Prompts for Source
[原文地址]:http://blogs.msdn.com/b/heaths/archive/2012/07/26/how-visual-studio-2012-avoids-prompts-for-s ...
- BZOJ 1207 DP
打一次鼹鼠必然是从曾经的某一次打鼹鼠转移过来的 以打每一个鼹鼠时的最优解为DP方程 #include<iostream> #include<cstdio> #include&l ...
- STM32 Timer : Base Timer, Input Capture, PWM, Output Compare
http://www.cs.indiana.edu/~geobrown/book.pdf An example of a basic timer is illustrated in Figure 10 ...
- CVPR 2017
https://www.leiphone.com/news/201707/5D5qSICrej6xIdzJ.html Densely Connected Convolutional Networks ...