(django)08 django的cookie和session

django的cookie和session

1.cookie

(0)注册app

修改settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'cookietest',
    #'sessiontest',
]

(1)模板

mlogin.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>这里是cookie login页面</h2>
<h3>用户登录</h3>
<!-- <form action="/cookietest/login/" method="post"> -->
<form action="/cookietest/login/" method="post">
    {% csrf_token %}
    <p>用户名: <input type="text" name="username"></p>
    <p>密码: <input type="password" name="pwd"></p>
    <button type="submit">登录</button>
</form>
</body>
</html>

mindex.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<h2>这里是cookie index页面</h2>


<a href="/cookietest/logout/">注销</a>
</body>
</html>

mdetail.html,没有cookie不能访问这个页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<h2>这里是cookie detail页面</h2>
<a href="/cookietest/logout/">注销</a>

</body>
</html>

(2)模型

models.py

from django.db import models

# Create your models here.
class UserInfo(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=32)

在admin.py中注册模型

from django.contrib import admin
from .models import *

# Register your models here.
admin.site.register(UserInfo)

(3)视图

views.py

from django.shortcuts import render, redirect
from . import models
# Create your views here.
def login(request):
    if request.method == "GET":
        return render(request, "mlogin.html")
    username = request.POST.get("username")
    password = request.POST.get("pwd")

    user_obj = models.UserInfo.objects.filter(username=username, password=password).first()
    print(user_obj.username)

    if not user_obj:
        return redirect("/cookietest/login/")
    else:
        rep = redirect("/cookietest/index/")
        rep.set_cookie("is_login", True)
        return rep


def index(request):
    print(request.COOKIES.get('is_login'))
    status = request.COOKIES.get('is_login')  # 收到浏览器的再次请求,判断浏览器携带的cookie是不是登录成功的时候响应的 cookie
    if not status:
        return redirect('/cookietest/login/')
    return render(request, "mindex.html")


def logout(request):
    rep = redirect('/cookietest/login/')
    rep.delete_cookie("is_login")
    return rep  # 点击注销后执行,删除cookie,不再保存用户状态,并弹到登录页面


def detail(request):
    print(request.COOKIES.get('is_login'))
    status = request.COOKIES.get('is_login')
    if not status:
        return redirect('/cookietest/login/')
    return render(request, "mdetail.html")

(4)路由

from django.urls import path
from .views import *

urlpatterns = [
    path('login/', login),
    path('index/', index),
    path('logout/', logout),
    path('detail/', detail)
]

(5)效果

请添加图片描述
请添加图片描述
请添加图片描述

2.session

(0)注册app

修改settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'cookietest',
    'sessiontest',
]

(1)模板

s_mlogin.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>这里是session login页面</h2>
<h3>用户登录</h3>
<!-- <form action="/cookietest/login/" method="post"> -->
<form action="/sessiontest/session_login/" method="post">
    {% csrf_token %}
    <p>用户名: <input type="text" name="username"></p>
    <p>密码: <input type="password" name="pwd"></p>
    <button type="submit">登录</button>
</form>
</body>
</html>

s_mindex.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h2>这里是session_index页面,当前用户:{{ request.session.user1 }}</h2>
<a href="/sessiontest/s_logout/">注销</a>
</body>
</html>

(2)模型

models.py

from django.db import models

# Create your models here.
class UserInfo(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=32)

在admin.py中注册模型

from django.contrib import admin
from .models import *

# Register your models here.
admin.site.register(UserInfo)

(3)视图

views.py

from django.shortcuts import render, redirect
from .models import *

# Create your views here.
def login(request):
    if request.method == "GET":
        return render(request, "s_mlogin.html")
    username = request.POST.get("username")
    password = request.POST.get("pwd")

    user_obj = UserInfo.objects.filter(username=username, password=password).first()
    print(user_obj.username)

    if not user_obj:
        return redirect("/sessiontest/session_login/")
    else:
        request.session['is_login'] = True
        request.session['user1'] = username
        return redirect("/sessiontest/s_index/")


def s_index(request):
    status = request.session.get('is_login')
    if not status:
        return redirect('/sessiontest/session_login/')
    return render(request, "s_mindex.html")


def s_logout(request):
   # del request.session["is_login"] # 删除session_data里的一组键值对
    request.session.flush() # 删除一条记录包括(session_key session_data expire_date)三个字段
    return redirect('/sessiontest/session_login/')

(4)路由

from django.urls import path
from .views import *

urlpatterns = [
    path('session_login/', login),
    path('s_index/', s_index),
    path('s_logout/', s_logout),
]

(5)效果

请添加图片描述
请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值