Django

Django的Session基础学习

from django.contrib.auth import authenticate, login
from django.http import JsonResponse
from django.contrib.sessions.models import Session
from django.contrib.auth.models import User
from django.utils import timezone
from datetime import timedelta
from django.contrib.sessions.models import Session
from django.views.decorators.csrf import csrf_exempt
from django.contrib.auth.models import User
from django.http import JsonResponse
#curl -X POST -d "username=jango&password=jango" http://127.0.0.1:8000/catalog/login/
#命令窗口成功调用
@csrf_exempt
def login_view(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')

        # 使用 Django 的 authenticate 方法验证用户名和密码
        user = authenticate(request, username=username, password=password)

        if user is not None:
            # 验证成功,创建 session
            login(request, user)

            # 获取 sessionid
            sessionid = request.session.session_key

            # 设置 session 的过期时间(假设30分钟后过期)
            session = Session.objects.get(session_key=sessionid)
            request.session.set_expiry(timedelta(minutes=30))
            session.save()

            return JsonResponse({
                'status': 'success',
                'message': '登录成功',
                'sessionid': sessionid,
                'username': user.username,
            })
        else:
            return JsonResponse({
                'status': 'fail',
                'message': 'username or password fail',
            })

    return JsonResponse({
        'status': 'fail',
        'message': 'only support POST method',
    })

@csrf_exempt
def get_user_info(request):
    # 获取请求中的 sessionid
    sessionid = request.COOKIES.get('sessionid')

    if sessionid is None:
        return JsonResponse({
            'status': 'fail',
            'message': '未找到 sessionid',
        })

    try:
        # 查找与 sessionid 对应的 session
        session = Session.objects.get(session_key=sessionid)

        # 检查 session 是否已经过期
        if session.expire_date < timezone.now():
            return JsonResponse({
                'status': 'fail',
                'message': 'Session 已过期',
            })

        # 获取 session 中的用户数据
        user_id = session.get_decoded().get('_auth_user_id')

        if not user_id:
            return JsonResponse({
                'status': 'fail',
                'message': '未找到用户信息',
            })

        # 获取用户信息
        user = User.objects.get(id=user_id)

        return JsonResponse({
            'status': 'success',
            'username': user.username,
            'password': user.password,  # 通常不返回密码,注意此点
        })

    except Session.DoesNotExist:
        return JsonResponse({
            'status': 'fail',
            'message': '无效的 sessionid',
        })
    except User.DoesNotExist:
        return JsonResponse({
            'status': 'fail',
            'message': '用户未找到',
        })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值