• 关于Django的session的使用 (装饰器版)


    http协议是无状态,无状态的意思是每次请求都是独立的,它的这次请求和下次请求是没有关系的。

    这样我们在web要判断是否登录就要传递一种信息给我们的服务器,让服务器根据你给的信息,返回你的东西

    这里我是直接写如何在Django中使用的。

    from django.shortcuts import render, redirect, HttpResponse
    from users import models
    from functools import wraps
    
    
    # Create your views here.
    
    
    # 登录权限控制(session版)
    def check_login(func):
        @wraps(func)
        def inner(request, *args, **kwargs):
    
            if request.session.get("user"):
                return func(request, *args, **kwargs)
            else:
                next_url = request.path_info
                print(next_url)
                return redirect("/app01/login/?next_url={}".format(next_url))
    
        return inner
    
    # 在login中设置session
    def login(request):
        error_msg = None
        # 如果请求是POST就进去
        if request.method == 'POST':
            email = request.POST.get('email', None)
            pwd = request.POST.get('pwd', None)
            next_url = request.GET.get("next_url", None)
            if email == 'liuhong@qq.com' and pwd == '123':
                # 设置一个session
                request.session['user'] = email
                if next_url:
                    req = redirect(next_url)  # 得到一个对象
                else:
                    return HttpResponse('没有next_url的返回值')
                return req
            else:
                error_msg = '用户名或密码错误!!'
        return render(request, 'session/login.html', {'error': error_msg})
    
    
    @check_login
    def user_list(request):
        ret = models.Users.objects.all()
        return render(request, 'session/user_list.html', {'user_list': ret})
    
    
    # 注销函数
    def logout(request):
        # 只删除session数据
        # request.session.delete()
        # 如何删除session数据和cookie
        request.session.flush()
        return redirect("/app01/login/")
    

    这里要注意的是,在你的前端代码中的form表单的提交中的action的设置,要么为空要么就设置为下面哪种

    <form class="form-horizontal" action="{{ request.get_full_path }}" method="post">
    从csdn搬家过来的可能没有图片,原地址https://blog.csdn.net/weixin_38091140
  • 相关阅读:
    记RestTemplate远程请求接口数据的一些注意事项
    记使用SpringDataMongonDb时,dao方法命名的一个已解决但不知道为什么的bug
    charles 打断点后传参或返回数据更改
    在liunx上搭建git仓库1
    jsonpath 提取参数
    pytest 参数化的使用1
    pytest中断言失败后,也可以继续执行其他用例
    charles开启弱网功能
    httprunner 参数化
    httprunner中debugtalk使用
  • 原文地址:https://www.cnblogs.com/Apy-0816/p/11100274.html
Copyright © 2020-2023  润新知