zoukankan      html  css  js  c++  java
  • Django系列11:会话


    登录示例_Cookie













    Session


    Django默认将session存储到django_session表中

    session依赖于cookie,根据cookie上session表里去找,cookie清除了,session直接失效;
    以后退出登录的时候不要清除cookie退出;清cookie退出,服务器中会产生一条垃圾数据;
    seesion是服务端会话技术,数据存储在服务端,当我们调用request.session 存session时,生成一个key,
    默认设置一个过去时间,将这条数据的唯一标识(session_key)传给客户端(客户端怎么拿?通过cookie将session_key传递给客户端,客户端给它起了一个新的名字叫session_id,把session_key的值存在session_id里面),下次再找的时候或者以后上来带着session_id或者session_key,根据session_key找到session





    Token

    models.py
    class Student(models.Model):
        s_name = models.CharField(max_length=16, unique=True)
        s_password = models.CharField(max_length=128)
        s_token = models.CharField(max_length=256)
    
    urls.py
        url(r'^register/', views.register, name='register'),
    
        url(r'^studentlogin/', views.student_login, name='student_login'),
    
        url(r'^studentmine/', views.student_mine, name='student_mine'),
    
    views.py
    def register(request):
        if request.method == "GET":
            return render(request, 'student_register.html')
        elif request.method == "POST":
            username = request.POST.get("username")
    
            password = request.POST.get("password")
    
            try:
    
                student = Student()
    
                student.s_name = username
                student.s_password = password
    
                student.save()
    
            except Exception as e:
                return redirect(reverse("two:register"))
    
            return HttpResponse("注册成功")
    
    
    def student_login(request):
        if request.method == "GET":
            return render(request, 'student_login.html')
        elif request.method == "POST":
            username = request.POST.get("username")
    
            password = request.POST.get("password")
    
            students = Student.objects.filter(s_name=username).filter(s_password=password)
    
            if students.exists():
    
                student = students.first()
    
                ip = request.META.get("REMOTE_ADDR")
    
                token = generate_token(ip, username)
    
                student.s_token = token
    
                student.save()
    
                # response = HttpResponse("用户登录成功")
                #
                # response.set_cookie("token", token)
                #
                # return response
    
                data = {
                    "status": 200,
                    "msg": "login success",
                    "token": token
                }
    
                return JsonResponse(data=data)
            # return redirect(reverse("two:student_login"))
    
            data = {
                "status": 800,
                "msg": "verify fail"
            }
    
            return JsonResponse(data=data)
    
    
    def generate_token(ip, username):
    
        c_time = time.ctime()
    
        r = username
    
        return hashlib.new("md5", (ip + c_time + r).encode("utf-8")).hexdigest()
    
    
    def student_mine(request):
    
        # token = request.COOKIES.get("token")
        token = request.GET.get('token')
    
        try:
            student = Student.objects.get(s_token=token)
        except Exception as e:
            return redirect(reverse("two:student_login"))
    
        # return HttpResponse(student.s_name)
    
        data = {
            "msg": "ok",
            "status": 200,
            "data": {
                "username": student.s_name
            }
        }
    
        return JsonResponse(data=data)
    

    student_login.html
    <form action="{% url 'two:student_login' %}" method="post">
    
    
        <span>用户名:</span><input type="text" name="username" placeholder="请输入用户名">
        <br>
        <span>密码:</span><input type="text" name="password" placeholder="请输入你的银行卡密码">
        <br>
    
        <button>登录</button>
    </form>
    
    student_register.html
    <form action="{% url 'two:register' %}" method="post">
    
        <span>用户名:</span><input type="text" name="username" placeholder="请输入用户名">
        <br>
        <span>密码:</span><input type="text" name="password" placeholder="请输入你的银行卡密码">
        <br>
    
        <button>注册</button>
    
    </form>
    

    CSRF

    
        {% csrf_token %}
    
    two_login.html
    <form action="{% url 'two:login' %}" method="post">
    
        {% csrf_token %}
    
    
    {#    <input type="hidden" name="csrfmiddlewaretoken" value="xvHGTCuXBvJ0MLts9GMfkFpispNaqlBsiHJTgMCVuPE6wsf0ijFVqkYtkyZjsLbL">#}
    
        <span>用户名:</span><input type="text" placeholder="请输入用户名" name="username">
    
        <br>
    
        <button>登录</button>
    
    </form>
    

    目前状态

    • MTV
      • 基本完成
      • Template不会再讲了
      • Views也不会再讲了
      • Model
        • Model关系
        • Model继承
    • 高级
      • 第三方插件
      • 底层的部分原理
        • AOP 面向切面编程
          • 反扒
          • 安全
      • 文件上传
      • 前后端分离
        • RESTful
      • 日志
      • 后台管理
      • 用户角色,用户权限
      • 部署
      • 支付宝支付
  • 相关阅读:
    TCP协议报文段的解析
    在阿里云轻量级云服务器上安装redis
    MySQL学习(一)
    GIT学习(一)
    speed up gradle
    Android Studio plugins recommend
    Android Activity life circle brief
    install and use gradle
    Android Studio, Failed to install Intel HAXM
    Vue3 ref、reactive、toRef、toRefs的区别
  • 原文地址:https://www.cnblogs.com/xidianzxm/p/12273312.html
Copyright © 2011-2022 走看看