国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Django Tutorial Part 7: Sessions framework

2018-05-15 17:26 更新
先決條件: 完成之前的所有教學(xué)主題,包括 Django教程第6部分:通用列表和詳細(xì)信息視圖
目的: 了解如何使用會(huì)話(huà)。

概述

我們?cè)谇懊娴慕坛讨袆?chuàng)建的 LocalLibrary 網(wǎng)站允許用戶(hù)瀏覽圖書(shū) 和作者在目錄中。 雖然內(nèi)容是從數(shù)據(jù)庫(kù)動(dòng)態(tài)生成的,但是當(dāng)用戶(hù)使用站點(diǎn)時(shí),每個(gè)用戶(hù)基本上都可以訪(fǎng)問(wèn)相同的頁(yè)面和類(lèi)型的信息。

在"真實(shí)"庫(kù)中,您可能希望根據(jù)用戶(hù)以前對(duì)網(wǎng)站,偏好設(shè)置等的使用情況為個(gè)別用戶(hù)提供自定義體驗(yàn)。例如,您可以隱藏用戶(hù)以前在下次訪(fǎng)問(wèn)時(shí)所確認(rèn)的警告消息 站點(diǎn)或存儲(chǔ)并尊重他們的偏好(例如他們希望在每一頁(yè)上顯示的搜索結(jié)果的數(shù)量)。

會(huì)話(huà)框架允許您實(shí)現(xiàn)此類(lèi)行為,允許您在每個(gè)站點(diǎn)訪(fǎng)問(wèn)者的基礎(chǔ)上存儲(chǔ)和檢索任意數(shù)據(jù)。

什么是會(huì)話(huà)?

網(wǎng)絡(luò)瀏覽器和服務(wù)器之間的所有通信都是通過(guò)HTTP協(xié)議進(jìn)行的,這是無(wú)狀態(tài) 協(xié)議是無(wú)狀態(tài)的意味著客戶(hù)端和服務(wù)器之間的消息彼此完全獨(dú)立 - 沒(méi)有基于先前消息的"序列"或行為的概念。 因此,如果你想有一個(gè)網(wǎng)站跟蹤與客戶(hù)端的持續(xù)關(guān)系,你需要自己實(shí)現(xiàn)。

會(huì)話(huà)是Django(和大多數(shù)Internet)用于跟蹤站點(diǎn)和特定瀏覽器之間的"狀態(tài)"的機(jī)制。 會(huì)話(huà)允許您為每個(gè)瀏覽器存儲(chǔ)任意數(shù)據(jù),并在瀏覽器連接時(shí)將此數(shù)據(jù)提供給網(wǎng)站。 與會(huì)話(huà)相關(guān)聯(lián)的各個(gè)數(shù)據(jù)項(xiàng)然后由"密鑰"引用,"密鑰"用于存儲(chǔ)和檢索數(shù)據(jù)。

Django使用包含特殊會(huì)話(huà)ID 的cookie來(lái)標(biāo)識(shí)每個(gè)瀏覽器及其與網(wǎng)站的關(guān)聯(lián)會(huì)話(huà)。 實(shí)際的會(huì)話(huà)數(shù)據(jù)在默認(rèn)情況下存儲(chǔ)在站點(diǎn)數(shù)據(jù)庫(kù)中(這比將數(shù)據(jù)存儲(chǔ)在cookie中更安全,在cookie中它們更容易受到惡意用戶(hù)的攻擊)。 您可以配置Django將會(huì)話(huà)數(shù)據(jù)存儲(chǔ)在其他位置(緩存,文件,"安全"Cookie),但默認(rèn)位置是一個(gè)良好的和相對(duì)安全的選項(xiàng)。

啟用會(huì)話(huà)

當(dāng)我們創(chuàng)建骨架網(wǎng)站(在教程2中)時(shí),會(huì)話(huà)自動(dòng)啟用。

配置在項(xiàng)目文件( locallibrary / locallibrary / settings.py )的 INSTALLED_APPS MIDDLEWARE 部分中設(shè)置,如下所示:

INSTALLED_APPS = [
    ...
    'django.contrib.sessions',
    ....

MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    ....

使用會(huì)話(huà)

您可以從視圖中訪(fǎng)問(wèn) request 參數(shù)(作為視圖的第一個(gè)參數(shù)傳遞的 HttpRequest )訪(fǎng)問(wèn) session 屬性。 此會(huì)話(huà)屬性表示與當(dāng)前用戶(hù)的特定連接(或更準(zhǔn)確地說(shuō),與當(dāng)前瀏覽器的連接,如本網(wǎng)站的瀏覽器Cookie中的會(huì)話(huà)ID所標(biāo)識(shí))。

session 屬性是一個(gè)類(lèi)似字典的對(duì)象,您可以在視圖中讀取和寫(xiě)入任意多次,將其修改為希望的。 你可以做所有正常的字典操作,包括清除所有數(shù)據(jù),測(cè)試一個(gè)鍵是否存在,循環(huán)通過(guò)數(shù)據(jù)等。大多數(shù)時(shí)候,你只需使用標(biāo)準(zhǔn)的"字典"API來(lái)獲取和設(shè)置值。

下面的代碼片段顯示了如何使用與當(dāng)前會(huì)話(huà)(瀏覽器)相關(guān)聯(lián)的鍵" my_car "來(lái)獲取,設(shè)置和刪除一些數(shù)據(jù)。

注意:Django的一大優(yōu)點(diǎn)是,您不需要考慮將會(huì)話(huà)與您當(dāng)前請(qǐng)求在視圖中綁定的機(jī)制。 如果我們?cè)谖覀兊囊晥D中使用下面的片段,我們知道 my_car 的信息只與發(fā)送當(dāng)前請(qǐng)求的瀏覽器相關(guān)。

# Get a session value by its key (e.g. 'my_car'), raising a KeyError if the key is not present
my_car = request.session['my_car']

# Get a session value, setting a default if it is not present ('mini')
my_car = request.session.get('my_car', 'mini')

# Set a session value
request.session['my_car'] = 'mini'

# Delete a session value 
del request.session['my_car']

API還提供了大多數(shù)用于管理關(guān)聯(lián)的會(huì)話(huà)cookie的其他方法。 例如,有一些方法可以測(cè)試客戶(hù)端瀏覽器中支持的Cookie,設(shè)置和檢查Cookie到期日期,以及清除數(shù)據(jù)存儲(chǔ)中的過(guò)期會(huì)話(huà)。 您可以在如何使用會(huì)話(huà)中找到完整的API Django docs)。

保存會(huì)話(huà)數(shù)據(jù)

默認(rèn)情況下,Django僅保存到會(huì)話(huà)數(shù)據(jù)庫(kù),并在會(huì)話(huà)已修改(分配)或已刪除時(shí)將會(huì)話(huà)cookie發(fā)送到客戶(hù)端。 如果你使用它的會(huì)話(huà)密鑰更新一些數(shù)據(jù),如上一節(jié)所示,那么你不需要擔(dān)心這個(gè)! 例如:

# This is detected as an update to the session, so session data is saved.
request.session['my_car'] = 'mini'

如果您要更新會(huì)話(huà)數(shù)據(jù)中的某些信息,Django將無(wú)法識(shí)別您對(duì)會(huì)話(huà)所做的更改并保存了數(shù)據(jù)(例如,如果您要更改" 輪子"數(shù)據(jù)在" my_car "數(shù)據(jù)內(nèi),如下所示)。 在這種情況下,您需要將會(huì)話(huà)顯式標(biāo)記為已修改。

# Session object not directly modified, only data within the session. Session changes not saved!
request.session['my_car']['wheels'] = 'alloy'

# Set session as modified to force data updates/cookie to be saved.
request.session.modified = True

注意:您可以更改行為,以便網(wǎng)站可以通過(guò)向您的項(xiàng)目設(shè)置中添加 SESSION_SAVE_EVERY_REQUEST = True 來(lái)更新每個(gè)請(qǐng)求的數(shù)據(jù)庫(kù)/發(fā)送Cookie( locallibrary / locallibrary /settings.py )。

簡(jiǎn)單的例子 - 獲取訪(fǎng)問(wèn)計(jì)數(shù)

作為一個(gè)簡(jiǎn)單的現(xiàn)實(shí)示例,我們將更新庫(kù)以告知當(dāng)前用戶(hù)他們?cè)L問(wèn)了 LocalLibrary 主頁(yè)的次數(shù)。

打開(kāi) /localibrary/catalog/views.py ,然后以粗體顯示更改。

def index(request):
    ...

    num_authors=Author.objects.count()  # The 'all()' is implied by default.
    
    # Number of visits to this view, as counted in the session variable.
    num_visits=request.session.get('num_visits', 0)
    request.session['num_visits'] = num_visits+1
    
    # Render the HTML template index.html with the data in the context variable.
    return render(
        request,
        'index.html',
        context={'num_books':num_books,'num_instances':num_instances,'num_instances_available':num_instances_available,'num_authors':num_authors,
            'num_visits':num_visits}, # num_visits appended
    )

這里我們首先獲取\'num_visits\'會(huì)話(huà)密鑰的值,如果之前未設(shè)置,則將值設(shè)置為0。 每次收到請(qǐng)求時(shí),我們都會(huì)增加該值并將其存回會(huì)話(huà)中(下次用戶(hù)訪(fǎng)問(wèn)頁(yè)面時(shí))。 然后將 num_visits 變量傳遞給我們的上下文變量中的模板。

注意:我們還可以測(cè)試瀏覽器是否支持Cookie(請(qǐng)參閱 http / sessions /">如何使用會(huì)話(huà)的示例)或設(shè)計(jì)我們的UI,以便無(wú)論是否支持cookie無(wú)關(guān)緊要。

將以下塊底部顯示的行添加到"動(dòng)態(tài)內(nèi)容"部分底部的主HTML模板( /locallibrary/catalog/templates/index.html ),以顯示上下文變量 :

<h2>Dynamic content</h2>

<p>The library has the following record counts:</p>
<ul>
<li><strong>Books:</strong> {{ num_books }}</li>
<li><strong>Copies:</strong> {{ num_instances }}</li>
<li><strong>Copies available:</strong> {{ num_instances_available }}</li>
<li><strong>Authors:</strong> {{ num_authors }}</li>
</ul>

<p>You have visited this page {{ num_visits }}{% if num_visits == 1 %} time{% else %} times{% endif %}.</p>

保存更改并重新啟動(dòng)測(cè)試服務(wù)器。 每次刷新頁(yè)面時(shí),數(shù)字都應(yīng)該更新。

    概要

    您現(xiàn)在知道使用會(huì)話(huà)改善與匿名用戶(hù)的互動(dòng)是多么容易。

    您現(xiàn)在知道使用會(huì)話(huà)改善與匿名用戶(hù)的互動(dòng)是多么容易。...

    也可以看看

    以上內(nèi)容是否對(duì)您有幫助:
    在線(xiàn)筆記
    App下載
    App下載

    掃描二維碼

    下載編程獅App

    公眾號(hào)
    微信公眾號(hào)

    編程獅公眾號(hào)