django設置cookie和session


1 設置cookie

本例中應用名稱為cookie

模型model

from django.db import models

from django.db import models
class UserInfo(models.Model):
    username = models.CharField(max_length=64)
    password = models.CharField(max_length=64)

數據庫遷移

python manage.py makemigrations
python manage.py migrate

給數據庫添加數據

 

路由urls

from django.contrib import admin
from django.urls import path
from cookie import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login),
    path('index/', views.index),
]

視圖函數

from django.shortcuts import render, redirect, HttpResponse
from cookie import models

def login(request):
    ret = ""
    if request.method == "POST":
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        # 查詢數據庫中的用戶名和密碼
        user_obj = models.UserInfo.objects.filter(username=user, password=pwd).first()
        if user_obj:
            """
            如果驗證通過,則重定向至index並設置cookie
            """
            obj = redirect("/index/")
            obj.set_cookie("is_login", True, 30)  # cookie有效期為30秒
            obj.set_cookie("username", user_obj.username)
            return obj
        else:
            ret = "用戶名或密碼錯誤"
    return render(request, "login.html", {"ret": ret})


def index(request):
    is_login = request.COOKIES.get("is_login")
    username = request.COOKIES.get("username")
    if not is_login:
        return redirect("/login/")
    return render(request, "index.html", {
        "user": username
    })    

模板頁面

登錄頁面 login.html

<body>
<h3>用戶登錄頁面</h3>
<form action="/login/" method="post">
    {% csrf_token %}
    <p>用戶名:<input type="text" name="user"></p>
    <p>密碼:<input type="password" name="pwd"></p>
    <p><span>{{ ret }}</span></p>
    <input type="submit" value="登錄" class="sub_btn">
</form>
</body>

首頁index.html

<body>
<h3>這是index頁面。你好 {{ user }}</h3>
</body>

下來訪問測試一下

點擊登錄

可以看到,已經按預想跳轉至index頁面

下來看看設置的cookie

 

 再來看看,重定向訪問時攜帶的cookie值

 

2 設置session

創建應用

python manage.py startapp session

注冊應用

設置settings.py

INSTALLED_APPS = [
    ...
    'cookie.apps.CookieConfig',
    'session.apps.SessionConfig'
]

路由urls

.....
from session import views as session_views

urlpatterns = [
    ......
    path('session_login', session_views.session_login),
    path('session_index', session_views.session_index),
    path('session_logout', session_views.session_logout),
]

視圖函數

from django.shortcuts import render, redirect
from cookie import models  # 由於要用到數據,所有要吃cookie應用里面導入

def session_login(request):
    ret = ""
    if request.method == "POST":
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        user_obj = models.UserInfo.objects.filter(username=user, password=pwd).first()
        if user_obj:
            """
            如果驗證通過,則設置session,並返回session_index
            """
            request.session["is_login"] = True
            request.session["username"] = user_obj.username
            obj = redirect("/session_index/")
            return obj
        else:
            ret = "用戶名或密碼錯誤"
    return render(request, "session_login.html", {"ret": ret})

 

def session_index(request):
    is_login = request.session.get("is_login")
    username = request.session.get("username")
    if not is_login:
        """如果沒有登錄則跳轉至登錄頁面"""
        return redirect("/session_login")

    return render(request, "session_index.html", {"user": username})


def session_logout(request):
    request.session.flush()
    return redirect("/session_login/")

模板頁面

session_index.html

<h3>基於session的用戶登錄</h3>
<form action="/session_login/" method="post">
    {% csrf_token %}
    <p>用戶名:<input type="text" name="user"></p>
    <p>密碼:<input type="password" name="pwd"></p>
    <p><span>{{ ret }}</span></p>
    <input type="submit" value="登錄" class="sub_btn">
</form>

session_index.html

<body>
<h3>這是session_index頁面。</h3>
<h3>你好 {{ user }}</h3>
<a href="/session_logout/">注銷</a>
</body>

 

下來測試

 

 

可以看到數據庫中session表已經有數據了,session_key為隨機生成的,為請求時攜帶的cookie鍵,session_data為

request.session["is_login"] = True
request.session["username"] = user_obj.username,經過某種算法加密后的數

 

 

再來看看頁面

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM