Django2.1通过中间件session验证实现登录验证功能

12 篇文章 1 订阅
10 篇文章 0 订阅

Django2.1通过中间件session验证实现登录验证功能

Django内置权限管理

Django是有内置的权限管理模块的,喜欢内置模块的同学可以使用内置的Auth模块,官方文档上有教程的。
Auth需要使用内置的User model,用起来总觉得有点别扭。不过我们可以参考Auth的源码,打造一个自定义的登录验证模块,按需定制。

自定义登录验证

思路

  1. 自建User模型
  2. 编写登录函数,登录成功则存入session
  3. 编写中间件,在中间件中验证session,如不存在session则重定向到登录页面

栗子

  1. 建立 User模型,这个自己随意,爱咋咋,别给username和password漏了就行。

  2. 编写登录函数

     这个登录函数仅仅是示例,想要更多内容还是自己添加吧。
    
# 用户登录函数
def login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        md5 = hashlib.md5()
        md5.update(password.encode())
        password = md5.hexdigest()

        info = models.Users.objects.filter(username=username, password=password)
        if info:
            # 存入session
            request.session['key'] = username
            return redirect(reverse('登录成功后要跳转的页面'))
        else:
            return HttpResponse(
                "<script>alert('账号或密码错误,回去吧!');window.location.href='" + reverse('登录页别名') + "'</script>")

    if request.method == 'GET':
        return render(request, '登录页')
  1. 中间件

     玩具版中间件
    
from django.shortcuts import HttpResponseRedirect
from django.utils.deprecation import MiddlewareMixin

# 自定义中间件类
class UsersAuthMiddleWare(MiddlewareMixin):
    
    def process_request(self, request):
        # 获取session内用户的登录标识
        key = request.session.get('key', 0)
        # 判断用户是否登录,访问路径是不是登录页面
        if key == 0 and request.path != '/login':
            # 未登录,重定向到登录页面
            return HttpResponseRedirect('/login')
  • 定义好中间件别忘了注册

总结

通过session完成登录验证。
数据库查询成功则存入正确的session,在中间件中过滤掉非法session。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安心写bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值