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 HttpResponseRedirectBasefrom django.shortcuts import resolve_url
# 重新重定向,修改状态码,由302(临时重定向)->401(未授权),方便前端fetch捕获class HttpResponseRedirect401(HttpResponseRedirectBase):    status_code = 401def 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 51050 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(40, ‘测试‘)
    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

原文地址:https://www.cnblogs.com/shengulong/p/10354318.html

时间: 2024-10-05 08:08:05

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

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

使用多继承 以及类似java中的静态代理模式 原理:OrderView.as_view()根据广度优先,调用的是LoginRequiredMixin中的as_view(cls, *args, **kwargs) 这时的cls=OrderView 接下来super(LoginRequiredMixin, cls).as_view(*args, **kwargs) 会调用到View类中的as_view()并返回一个视图函数 然后,用将这个视图函数作为参数传给Login_required()并返回经过

☆Django☆---中间件 csrf跨站请求伪造 auth模块 settings功能插拔式源码

Django中间件 django生命周期图 中间件: 概念: Django中间件就类似于 django的保安   请求 的时候需要先经过中间件才能到达django后端(urls, views)   响应 走的时候也需要经过中间件才能到达web服务网关接口 django默认的七个中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.Session

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

视图 from django.contrib import auth from django.contrib.auth.models import User from django.views.decorators.csrf import csrf_exempt from django.http import HttpResponseRedirect # 用户注册 @csrf_exempt def register(request): errors = [] account = None pas

Django之auth模块用户认证模块

一.Auth模块 1)auth模块是什么.登录后台使用的账号密码,则就是使用的auth模块创建的表 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统. 此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点.它内置了强大的用户认证系统--auth, 它默认使用 auth_user 表来存储用户数据. 2)auth模块的功能

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

阅读目录 auth模块 User对象 认证进阶 一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: authenticate()    提供了用户认证,即验证用户名以及密码是否正确,一般需要username  password两个关键字参数 如果认证信息有效,会返回一个  User  对象.authenticate()会在User 对象上设置一个属性来标识后端已经认证了该用户,且该信息

python测试开发django-42.auth模块登陆认证

前言 在开发一个网站时,经常会用到用户的注册和登陆相关的账号管理功能,auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. 像用户注册.用户登录.用户认证.注销.修改密码等功能都不需要我们去开发,这些功能django已经早就设计好了. auth模块 当我们执行makemigrations和migrate数据库迁移的时候,会自动新增一个auth_user表,用户存放用户账号密码等相关信息. 创建超级管理员用户python manage.py createsu

Django之权限管理插件

参考:https://www.cnblogs.com/alex3714/articles/6661911.html http://www.cnblogs.com/wupeiqi/articles/6229414.html 1.      什么是权限? 权限就是对软件系统中各种资源的访问和操作的控制! 2.      什么是资源? 在软件系统中,数据库.内存.硬盘里数据都是资源,资源就是数据! 3.      动作 资源本身是静态的,必须通过合适的动作对其进行访问和操作,我们说要控制权限,其实本质

Django的用户认证组件

用户认证 (一)auth模块 1 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1.1 .authenticate()    提供了用户认证,即验证用户名以及密码是否正确,一般需要username  password两个关键字参数 如果认证信息有效,会返回一个  User  对象.authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是

166.登录、退出登录以及登录限制案例

权限和分组 登录.注销和登录限制 1. 登录 在使用authenticate进行验证后,如果验证通过了,那么就会返回一个user对象,拿到user对象之后,可以使用django.contrib.auth.login进行登录,部分示例代码如下: user = authenticate(username=username, password=password) if user is not None and user.is_active: login(request, user) 2. 注销: 注销