版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、Python Web開發(fā)基礎教程(Django版)第8章 Django工具本章主要內(nèi)容:Admin站點用戶認證發(fā)送E-mail會話控制8.1 Admin站點本節(jié)主要內(nèi)容管理用戶管理組管理模型8.1.1 啟用 Admin 站點 要使用Admin站點,需先完成6個步驟的操作:注冊應用、注冊上下文處理器、注冊中間件、配置URL、遷移數(shù)據(jù)庫和創(chuàng)建超級用戶。在執(zhí)行django-admin命令創(chuàng)建項目時,Django會自動完成前4個步驟。1注冊應用在settings.py項目配置文件的INSTALLED_APPS變量中注冊Admin應用以及相關的支持應用,示例代碼如下。INSTALLED_APPS = d
2、jango.contrib.admin,#Admin站點 django.contrib.auth,#用戶認證系統(tǒng) django.contrib.contenttypes,#模型權限 django.contrib.sessions,#會話管理 django.contrib.messages,#消息管理 2注冊上下文處理器在TEMPLATES模板配置變量的OPTIONS參數(shù)中包含auth和messages上下文處理器,示例代碼如下。TEMPLATES = BACKEND: django.template.backends.django.DjangoTemplates, DIRS: , APP_DI
3、RS: True, OPTIONS: context_processors: django.contrib.auth.context_processors.auth, #用戶認證 django.contrib.messages.context_processors.messages,#消息管理 , , ,3注冊中間件在模板配置變量MIDDLEWARE中包含AuthenticationMiddleware中間件和MessageMiddleware 中間件,示例代碼如下。MIDDLEWARE = django.contrib.auth.middleware.AuthenticationMiddle
4、ware,#用戶認證django.contrib.messages.middleware.MessageMiddleware,#消息管理默認情況下,Admin站點使用英文。如果要使用中文,可注冊本地化中間件,示例代碼如下。MIDDLEWARE = django.middleware.locale.LocaleMiddleware,#本地化中間件4配置URL在urls.py文件中添加Admin站點的URL配置,示例代碼如下。from django.contrib import adminfrom django.urls import pathurlpatterns = path(admin/,
5、admin.site.urls), #Admin站點URL配置啟動開發(fā)服務器后,在瀏覽器中訪問:8000/admin5遷移數(shù)據(jù)庫Admin站點默認在數(shù)據(jù)庫中保存相關數(shù)據(jù)。在訪問Admin站點之前,應先執(zhí)行數(shù)據(jù)庫遷移操作,創(chuàng)建相關的數(shù)據(jù)表。例如,下面的命令在D盤創(chuàng)建項目chapter8,并執(zhí)行數(shù)據(jù)庫遷移操作。D:django-admin startproject chapter8D:cd chapter8D:chapter8python manage.py makemigrationsD:chapter8python manage.py migrate6創(chuàng)建超級用戶登錄Admin站點的用戶必須具
6、有超級用戶權限(is_superuser屬性為True)或者具有訪問Admin站點的權限(is_staff屬性為True)。下面的命令為項目創(chuàng)建超級用戶。D:chapter8python manage.py createsuperuserUsername (leave blank to use xbg): adminEmail address:Password:Password (again):Superuser created successfully.8.1.2管理用戶登錄Admin站點演示8.1.3管理組登錄Admin站點演示8.1.4管理模型默認情況下,Admin站點不提供模型管理功能
7、。要在Admin站點中管理應用中的模型,需要修改應用的admin.py文件,在文件中注冊模型。實例:為本章實例項目添加一個應用,并在應用中定義模型,然后在Admin站點中管理該模型。1為本章實例項目添加應用在Windows命令行中進入項目主文件夾,執(zhí)行下面的命令創(chuàng)建test應用。D:chapter8python manage.py startapp test2定義模型修改test應用中的models.py文件,定義模型,代碼如下。from django.db import modelsclass person(models.Model): name=models.CharField(max_l
8、ength=8) age=models.SmallIntegerField()3注冊應用修改項目配置文件settings.py,在INSTALLED_APPS變量中添加test應用,示例代碼如下。INSTALLED_APPS = test, 4執(zhí)行數(shù)據(jù)庫遷移操作執(zhí)行下面的命令完成數(shù)據(jù)庫遷移操作。D:chapter8python manage.py makemigrationsD:chapter8python manage.py migrate5注冊模型修改應用的admin.py文件,注冊模型,代碼如下。from django.contrib import adminfrom .models i
9、mport personadmin.site.register(person)#注冊模型6在Admin站點中管理模型8.2 用戶認證本節(jié)主要內(nèi)容用戶認證相關模型控制臺用戶管理內(nèi)置認證視圖自定義視圖中的身份認證限制頁面登錄訪問限制頁面訪問權限8.2.1用戶認證相關模型Django使用內(nèi)置的User、Permission和Group模型來管理用戶認證的相關數(shù)據(jù)。1User模型User模型用于管理用戶數(shù)據(jù),模型包含的字段如下。username:用戶名,必填字段。最長150個字符。可以包含字母、數(shù)字、_、+、.和-等字符。first_name:名字,可選字段。最長30個字符。last_name:姓氏,
10、可選字段。最長150個字符。email:電子郵件地址,可選字段。password:存儲密碼的哈希值,可選字段。密碼可包含任意字符。groups:多對多關系,可選字段。關聯(lián)用戶組。user_permissions:多對多關系,可選字段。關聯(lián)用戶權限。is_staff:是否允許訪問Admin站點,可選字段。為True時表示賬戶可以訪問Admin站點。is_active:是否為活動賬戶,可選字段。為True時表示用戶賬戶為活動賬戶,非活動賬戶被禁止訪問。is_superuser:是否為超級用戶,可選字段。為True時表示用戶具有所有權限,否則為普通用戶。last_login:用戶上次登錄的日期時間,
11、可選字段。date_joined:創(chuàng)建賬戶的日期時間,可選字段。在數(shù)據(jù)庫中,User模型對應的數(shù)據(jù)表為auth_user2Permission模型Permission模型用于管理權限數(shù)據(jù),模型包含的字段如下。name:權限名稱,必填字段。最長255個字符。content_type:引用數(shù)據(jù)表django_content_type的id字段,必填字段。數(shù)據(jù)表django_content_type保存應用包含的模型記錄。codename:用于編程的權限名稱,必填字段。最長100個字符。在數(shù)據(jù)庫中,Permission模型對應的數(shù)據(jù)表為auth_permission3Group模型Group模型用于
12、管理組數(shù)據(jù),模型包含的字段如下。name:組名稱,必填字段。最長80個字符。permissions:多對多關系,關聯(lián)權限。在數(shù)據(jù)庫中,Group模型對應的數(shù)據(jù)表為auth_group4模型關系User模型與Permission模型之間是多對多關系,該關系在數(shù)據(jù)庫中對應的數(shù)據(jù)表為auth_user_user_permissionsUser模型與Group模型之間是多對多關系,該關系在數(shù)據(jù)庫中對應的數(shù)據(jù)表為auth_user_groupsGroup模型與Permission模型之間是多對多關系,該關系在數(shù)據(jù)庫中對應的數(shù)據(jù)表為auth_group_permissions8.2.2控制臺用戶管理可在A
13、dmin站點中交互式地完成添加、刪除和修改等用戶管理操作,詳細內(nèi)容請參考8.1.2節(jié)。本節(jié)主要介紹如何通過代碼完成用戶管理。1創(chuàng)建用戶調(diào)用create()方法創(chuàng)建User對象,示例代碼如下。 user=User.objects.create(username=testuser) user.set_password(123456) user.save()注意,為用戶設置密碼應調(diào)用set_password()方法,該方法將明文密碼轉(zhuǎn)換成的哈希值存入password字段??烧{(diào)用User模型提供的create_user()和create_superuser()方法來創(chuàng)建用戶,示例代碼如下。 user=
14、User.objects.create_user(testuser3,test,123456) user=User.objects.create_superuser(testuser4,test4,123456)create_user()方法用于創(chuàng)建普通用戶,create_superuser()方法用于創(chuàng)建超級用戶。2修改用戶可通過模型對象修改用戶相關屬性,示例代碼如下。 user=User.objects.get(username=testuser) user.email=123456 user.save()3刪除用戶調(diào)用模型對象的delete()方法可刪除用戶,示例代碼如下。 user=U
15、ser.objects.get(username=test1) user.delete()(1, admin.LogEntry: 0, auth.User_groups: 0, auth.User_user_permissions: 0, auth.User: 1)4驗證用戶authenticate()方法將用戶名和密碼作為參數(shù)來驗證用戶。如果用戶名和密碼正確,方法返回關聯(lián)用戶名的User模型對象;未通過驗證時,返回None。例如: from django.contrib.auth import authenticate user=authenticate(username=testuser,
16、 password=123456) print(user)Testuser user=authenticate(username=testuser, password=456) print(user)None5設置權限User模型與Permission模型之間是多對多關系,可以從關系的兩端為用戶設置權限。通過User對象設置權限,示例代碼如下。 from django.contrib.auth.models import Permission admins=Permission.objects.filter(codename_endswith=permission)#獲得權限 user=Use
17、r.objects.get(username=testuser) user.user_permissions.set(admins)#設置權限 for p in user.user_permissions.all():#查看權限. print(p.codename,).add_permission Can add permissionchange_permission Can change permissiondelete_permission Can delete permissionview_permission Can view permission創(chuàng)建新權限,并授權給用戶,示例代碼如下
18、。 from test.models import person from django.contrib.contenttypes.models import ContentType content_type_id=ContentType.objects.get_for_model(person) p=Permission.objects.create(codename=can_analyse_person, name=能分析person數(shù)據(jù),content_type=content_type_id) user.user_permissions.add(p)#添加權限也可通過Permissio
19、n模型為用戶授權,示例代碼如下。 p=Permission.objects.get(codename=view_permission)#獲得權限對象 p.user_set.add(user) #為權限添加關聯(lián)用戶 p.user_set.all()QuerySet 也可通過將用戶加入組的方式來為用戶授權,示例代碼如下。 g=Group.objects.get(id=1) g.user_set.add(user)#將用戶加入組8.2.3內(nèi)置認證視圖Django在django.contrib.auth.views.py中定義了幾個用于登錄、注銷和密碼管理的認證視圖類。要使用內(nèi)置的認證視圖,首先需要在
20、配置文件中添加下面的URL配置。urlpatterns = path(accounts/, include(django.contrib.auth.urls),#導入內(nèi)置認證視圖URL配置path(accounts/profile/,log_views.login_ok),#映射自定義的視圖 Django在默認視圖中會使用項目配置文件settings.py中設置的3個URL。LOGIN_URL:默認的登錄URL,默認值為“/accounts/login/”LOGIN_REDIRECT_URL:默認的登錄成功后轉(zhuǎn)向的URL,默認值為“/accounts/profile/”。Django沒有為“/
21、accounts/profile/”定義默認視圖,上面代碼中的“l(fā)og_views.login_ok”是自定義的視圖。LOGOUT_REDIRECT_URL:默認的注銷登錄后轉(zhuǎn)向的URL,默認值為 None。1登錄視圖LoginView登錄視圖用于處理用戶登錄操作,該視圖默認的URL模式名稱為login。在模板中可用% url login %獲取登錄視圖URL。在采用GET方法訪問登錄視圖時,視圖顯示默認登錄表單。當用戶輸入用戶名和密碼后再提交表單時,登錄視圖使用用戶數(shù)據(jù)表auth_user中的數(shù)據(jù)驗證用戶名和密碼是否正確。用戶通過驗證時,視圖調(diào)用login()方法,將用戶的User對象寫入S
22、ession對象,同時會在auth_user表中記錄登錄時間。用戶未通過驗證時,重新顯示登錄頁面,并在頁面中顯示錯誤提示信息。登錄視圖會向模板傳遞下列變量。form:表單對象,默認為AuthenticationForm,可以使用自定義的登錄表單。next:登錄成功后的重定向URL。通常,可以在模板中用一個隱藏的表單字段設置next,示例代碼如下。site:當前站點ID,可在配置文件中用SITE_ID變量進行設置。site_name:站點名稱,視圖將其設置為request.METASERVER_NAME。2注銷登錄視圖LogoutView注銷登錄視圖用于處理用戶注銷登錄操作,注銷登錄會刪除Ses
23、sion中的用戶信息。注銷登錄視圖的默認URL模式名稱為logout。注銷登錄視圖會向模板傳遞下列變量。title:字符串“Logged out”。site:當前站點ID,默認為SITE_ID變量值。site_name:站點名稱。注銷登錄視圖使用Admin站點的默認注銷登錄模板。3密碼修改視圖PasswordChangeView密碼修改視圖用于修改用戶密碼,視圖的默認URL模式名稱為password_change。密碼修改視圖會向模板傳遞一個form變量,用于引用密碼修改表單。默認情況下,密碼修改視圖使用Admin站點的密碼修改模板。修改前面的登錄成功視圖模板文件login_ok.html,添
24、加修改密碼鏈接,代碼如下。% if user.is_authenticated % 登錄成功,歡迎: user.username ,登錄時間: user.last_login 修改密碼 % if perms.test % 4密碼修改完成視圖PasswordChangeDoneView密碼修改完成視圖用于處理成功完成密碼修改后的信息,默認的URL模式名稱為password_change_done。密碼修改完成視圖顯示的默認響應頁面如圖8-30所示。5密碼重置視圖PasswordResetView密碼重置視圖用于在用戶忘記密碼時申請重置密碼,視圖默認的URL模式名稱為password_reset。
25、密碼重置視圖的默認模板文件為registration/password_reset_form.html,同時,視圖還使用下面的兩個默認模板。密碼重置郵件內(nèi)容模板:registration/password_reset_email.html,可用視圖的email_template_name屬性設置。密碼重置郵件主題模板:registration/password_reset_subject.txt,可用視圖的subject_template_name屬性設置。6密碼重置完成視圖PasswordResetDoneView密碼重置完成視圖的默認URL模式名稱為 password_reset_done
26、,默認模板文件為registration/password_reset_done.html。如果沒有為密碼重置視圖設置success_url(成功發(fā)送密碼重置郵件后的重定向URL),Django就會調(diào)用密碼重置完成視圖。如果用戶提供的E-mail地址在auth_user表中存在,但用戶處于不活動狀態(tài)或者密碼無效時,Django也會調(diào)用密碼重置完成視圖,但不會發(fā)送密碼重置郵件。7密碼重置確認視圖PasswordResetConfirmView用戶在密碼重置郵件中單擊鏈接,跳轉(zhuǎn)到密碼重置視圖返回的新密碼設置頁面。密碼重置確認視圖默認的URL模式名稱為 password_reset_confirm默
27、認模板文件為registration/password_reset_confirm.html。在配置視圖URL時,應在URL中包含兩個參數(shù):uidb64和token,示例代碼如下。path(reset/, views.PasswordResetConfirmView.as_view(), name=password_reset_confirm),其中uidb64是基于64位的用戶ID編碼,token是用于檢查密碼是否有效的令牌8新密碼設置完成視圖PasswordResetCompleteView成功完成新密碼設置后調(diào)用新密碼設置完成視圖視圖默認的URL模式名稱為 password_reset_
28、complete默認的模板文件為registration/password_reset_complete.html。8.2.4自定義視圖中的身份認證在自定義視圖中,可調(diào)用django.contrib.auth模塊提供的下列方法進行身份認證。authenticate():以用戶名和密碼為參數(shù)驗證用戶。用戶名和密碼均正確時,返回該用戶的User對象,否則返回None。login():執(zhí)行登錄注冊。將用戶的User對象保存到Session中。用戶登錄之前保存在Session中的數(shù)據(jù),在登錄后仍然會保留。logout():注銷登錄,刪除Session中的會話數(shù)據(jù)。8.2.5限制頁面登錄訪問可以使用自定
29、義方式或者登錄裝飾器來限制頁面登錄訪問。1使用自定義方法限制頁面登錄訪問通常,可通過request.user.is_authenticated的值來判斷用戶是否已經(jīng)登錄,其值為True表示用戶已經(jīng)登錄,否則未登錄。下面的視圖在用戶未登錄時跳轉(zhuǎn)到登錄頁面,用戶成功登錄后,再返回登錄前視圖。from chapter8 import settingsdef testlogin(request): if not request.user.is_authenticated: return redirect(%s?next=%s % (settings.LOGIN_URL, request.path) #
30、未登錄時跳轉(zhuǎn) else: news=歡迎:%s,你已經(jīng)登錄,可以訪問本頁面,注銷登錄?% (request.user.username,reverse(logoutdiy) return HttpResponse(news)settings.LOGIN_URL是在項目配置文件中定義的默認登錄URL2使用登錄裝飾器來限制頁面登錄訪問登錄裝飾器login_required用于限制頁面只能在用戶登錄后訪問。例如,前面的testlogin視圖可改寫為如下代碼。from django.contrib.auth.decorators import login_requiredlogin_requiredd
31、ef testlogin2(request): news=歡迎:%s,你已經(jīng)登錄,可以訪問本頁面,注銷登錄?% (request.user.username,reverse(logoutdiy)return HttpResponse(news)8.2.6限制頁面訪問權限裝飾器permission_required可用于限制訪問頁面必須具備特定權限,示例代碼如下。from django.contrib.auth.decorators import permission_requiredpermission_required(test.can_testlog)def testlogin3(requ
32、est): news=歡迎:%s,你已經(jīng)登錄,可以訪問本頁面,注銷登錄?% (request.user.username,reverse(logoutdiy) return HttpResponse(news)8.2.7自定義頁面訪問限制條件裝飾器user_passes_test允許使用自定義函數(shù)來檢測已登錄用戶是否可以訪問頁面,示例代碼如下。def check_in_blacklist(user):#檢測用戶是否在黑名單中 return not user.username in settings.LOGIN_BLACKLISTuser_passes_test(check_in_blackli
33、st)def testlogin4(request): news=歡迎:%s,你已經(jīng)登錄,可以訪問本頁面,注銷登錄?% (request.user.username,reverse(logoutdiy)return HttpResponse(news)裝飾器“user_passes_test(check_in_blacklist)”在用戶未登錄或者屬于黑名單用戶時,會使頁面重定向到登錄頁面。8.3 發(fā)送E-mail本節(jié)主要內(nèi)容E-mail配置發(fā)送密碼重置郵件自定義E-mail發(fā)送E-mail后端8.3.1E-mail配置要發(fā)送E-mail,需要配置SMTP服務,并在項目配置文件中設置E-mai
34、l選項。1配置SMTP服務以QQ郵件為例,進入QQ郵箱,在賬戶設置中開啟SMTP服務,如圖8-37所示。如果SMTP服務器已經(jīng)開啟,可先關閉該服務器,然后重新開啟。這樣,會收到一個授權密碼,該密碼用于在客戶端發(fā)送E-mail。2設置E-mail選項在項目配置文件settings.py中添加下列設置。EMAIL_HOST= #發(fā)送郵件服務器EMAIL_PORT=465 #郵件服務器端口EMAIL_HOST_USER=XXX#發(fā)送郵件賬戶EMAIL_HOST_PASSWORD=XXX#發(fā)送郵件授權密碼EMAIL_USE_SSL=True#與SMTP服務器通信時是否使用SSL連接DEFAULT_FR
35、OM_EMAIL=XXX#默認郵件發(fā)送人8.3.2發(fā)送密碼重置郵件8.2.3節(jié)介紹了Django提供的重置密碼相關的內(nèi)置視圖。要發(fā)送密碼重置郵件,在瀏覽器中訪問:8000/accounts/ password_reset,打開密碼重置頁面,如圖8-38所示。8.3.3自定義E-mail發(fā)送django.core.mail模塊提供的send_mail()方法用于發(fā)送E-mail其基本格式如下。send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_passw
36、ord=None, connection=None, html_message=None) 其中,subject、message、from_email和recipient_list是必選參數(shù),其他為可選參數(shù)。各參數(shù)含義如下。subject:郵件主題字符串。message:郵件內(nèi)容字符串,text/plain格式。from_email:發(fā)件人E-mail地址。recipient_list:收件人E-mail地址列表。fail_silently:True或False。為False時,郵件發(fā)送失敗會觸發(fā)異常smtplib.SMTPException。auth_user:發(fā)送賬戶,默認為EMAIL_H
37、OST_USER值。auth_password:發(fā)送郵件的授權密碼,默認為EMAIL_HOST_PASSWORD值。connection:郵件發(fā)送后端,默認為SMTP后端。html_message:HTML格式的郵件內(nèi)容,text/html格式。郵箱通常顯示HTML格式的郵件內(nèi)容,并可切換為純文本的message內(nèi)容。實例1定義郵件發(fā)送表單2定義郵件發(fā)送視圖3定義郵件發(fā)送模板4配置URL8.3.4E-mail后端郵件發(fā)送操作由E-mail后端完成。Django默認使用SMTP后端,即郵件由SMTP服務器發(fā)送。也可在Django配置文件中明確使用的后端配置,示例代碼如下。EMAIL_BACKEN
38、D = django.core.mail.backends.smtp.EmailBackend使用SMTP后端時,需在配置文件中配置下列變量。EMAIL_HOST:郵件發(fā)送服務器地址。EMAIL_PORT:郵件發(fā)送服務器端口。EMAIL_HOST_USER:發(fā)送郵件使用的賬戶名稱。EMAIL_HOST_PASSWOR:發(fā)送郵件使用的授權密碼。EMAIL_USE_SSL:發(fā)送郵件時是否使用SSL連接。DEFAULT_FROM_EMAIL:默認發(fā)件人。1控制臺后端在配置文件中使用下面的代碼啟用控制臺后端。EMAIL_BACKEND = django.core.mail.backends.conso
39、le.EmailBackend控制臺后端會將郵件發(fā)送到控制臺。運行開發(fā)服務器時,可在控制臺中看到郵件信息,如圖8-42所示。2文件后端文件后端會將郵件信息寫入文件。在配置文件中使用下面的代碼啟用文件后端。EMAIL_BACKEND = django.core.mail.backends.filebased.EmailBackendEMAIL_FILE_PATH = os.path.join(BASE_DIR, test/email_files) #郵件文件路徑 每次發(fā)送郵件時,Django會將時間戳作為文件名,將郵件內(nèi)容寫入文本文件3內(nèi)存后端在配置文件中使用下面的代碼啟用內(nèi)存后端。EMAIL_
40、BACKEND = django.core.mail.backends.locmem.EmailBackend在使用內(nèi)存后端時,Django會為django.core.mail模塊創(chuàng)建一個outbox屬性,用其保存郵件內(nèi)容。outbox屬性值是一個列表,其中的每一封郵件是一個EmailMessage對象。4虛擬后端在配置文件中使用下面的代碼啟用虛擬后端。EMAIL_BACKEND = django.core.mail.backends.dummy.EmailBackend使用虛擬后端時,可在瀏覽器中完成郵件發(fā)送操作,但虛擬后端不對郵件執(zhí)行任何操作。8.4會話控制本節(jié)主要內(nèi)容啟用會話控制會話對象
41、方法在視圖中使用會話會話通常指瀏覽器與Web服務器之間的通信。HTTP協(xié)議是無狀態(tài)的,Web服務器無法知道用戶上一次的會話數(shù)據(jù)。會話控制維護用戶在訪問網(wǎng)站過程中的狀態(tài)。會話控制通常使用Session和Cookie來實現(xiàn)。通常把Session稱為會話對象,Web服務器會為每個用戶創(chuàng)建一個Session對象,Session對象在服務器端保存用戶數(shù)據(jù)。Cookie用于在瀏覽器端保存用戶數(shù)據(jù),Web服務器可創(chuàng)建和讀寫Cookie。8.4.1啟用會話控制啟用Django會話控制包括注冊會話應用、啟用會話中間件和配置會話引擎等操作。1注冊會話應用在配置文件的INSTALLED_APPS變量中添加djang
42、o.contrib.sessions應用,示例代碼如下。INSTALLED_APPS = django.contrib.sessions,默認情況下,Django會注冊django.contrib.sessions應用。如果不使用會話控制,可從INSTALLED_APPS變量中將其刪除,以節(jié)省項目運行開銷。2啟用會話中間件在配置文件的MIDDLEWARE變量中添加會話中間件(Django默認啟用),示例代碼如下。MIDDLEWARE = django.contrib.sessions.middleware.SessionMiddleware, 3配置會話引擎會話引擎負責存儲會話數(shù)據(jù)。配置文件中
43、的SESSION_ENGINE變量用于配置會話引擎。Django提供5種會話引擎:數(shù)據(jù)庫后端、緩存、數(shù)據(jù)庫+緩存、文件和Cookie?;跀?shù)據(jù)庫后端的會話數(shù)據(jù)庫后端會話引擎用于實現(xiàn)基于數(shù)據(jù)庫的會話,其配置語句如下。SESSION_ENGINE=django.contrib.sessions.backends.db數(shù)據(jù)庫后端會話引擎是Django的默認設置,可以省略SESSION_ENGINE變量的配置。基于數(shù)據(jù)庫的會話使用數(shù)據(jù)庫中的django_session表存儲會話數(shù)據(jù)??梢酝ㄟ^django.contrib.sessions.models.Session模型訪問django_session
44、表。django_session表保存會話關鍵字、會話數(shù)據(jù)和會話過期時間等數(shù)據(jù),基于緩存的會話緩存會話引擎用于實現(xiàn)基于緩存的會話,其配置語句如下。SESSION_ENGINE=django.contrib.sessions.backends.cache基于緩存的會話在高速緩存中存儲會話數(shù)據(jù),除了需要配置緩存會話引擎外,還需要配置緩存。例如,下面的語句設配置Django在數(shù)據(jù)庫表中存儲緩存數(shù)據(jù)。CACHES = default: BACKEND: django.core.cache.backends.db.DatabaseCache, LOCATION: chapter8_cache_table
45、,#指定數(shù)據(jù)庫緩存表名稱 同時,執(zhí)行下面的命令創(chuàng)建數(shù)據(jù)庫緩存表。python manage.py createcachetable基于數(shù)據(jù)庫+緩存的會話數(shù)據(jù)庫+緩存會話引擎用于實現(xiàn)基于數(shù)據(jù)庫+緩存的會話,其配置語句如下。SESSION_ENGINE=django.contrib.sessions.backends.cached_db使用基于數(shù)據(jù)庫+緩存的會話時,Django將會話數(shù)據(jù)同時寫入緩存和數(shù)據(jù)庫表。基于文件的會話文件會話引擎用于實現(xiàn)基于文件的會話,引擎將會話數(shù)據(jù)寫入臨時文件,其配置語句如下。SESSION_ENGINE=django.contrib.sessions.backends.
46、fileSESSION_FILE_PATH= chapter8/session_file#會話文件路徑基于Cookie的會話Cookie會話引擎用于實現(xiàn)基于Cookie的會話,引擎將會話數(shù)據(jù)寫入Cookie,其配置語句如下。SESSION_ENGINE=django.contrib.sessions.backends.signed_cookies4會話相關配置配置文件中的會話相關配置如下。SESSION_CACHE_ALIAS = default#存放會話數(shù)據(jù)的后端名稱,默認為defaultSESSION_COOKIE_NAME = sessionid#Cookie中的會話名稱,默認為sess
47、ionidSESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2#Cookie有效時間,默認為2周SESSION_COOKIE_DOMAIN = None#Cookie中的會話域名,默認為NoneSESSION_COOKIE_SECURE = False#是否使用HTTPS協(xié)議傳輸Cookie,默認為FalseSESSION_COOKIE_PATH = /#Cookie中的會話路徑,默認為/SESSION_COOKIE_HTTPONLY = True#會話Cookie是否只支持HTTP傳輸,默認為TrueSESSION_SAVE_EVERY_REQUEST = Fa
48、lse#每次請求后保存會話,默認為FalseSESSION_EXPIRE_AT_BROWSER_CLOSE = False#每次關閉瀏覽器使會話失效SESSION_COOKIE_HTTPONLY值設置為True時,客戶端不能通過JavaScript腳本訪問會話Cookie,從而提高Cookie的安全性。8.4.2會話對象方法在命令行,可用下面的命令創(chuàng)建會話對象。 from django.contrib.sessions.backends.db import SessionStore session=SessionStore()#創(chuàng)建會話對象會話對象的常用操作如下。_setitem_(key, value):以字典方式修改會話數(shù)據(jù),示例代碼如下。 sessiondata=123_getitem_(key):以字典方式讀取會話數(shù)據(jù)。該
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 通信設備有限公司企業(yè)管理制度
- 江蘇省常熟市2024-2025學年八年級上學期期末質(zhì)量監(jiān)測歷史卷(含答案)
- 等離子體參數(shù)測試方法 編制說明
- 值守辦公室協(xié)議書(2篇)
- 2025年DCA-1皮革固色劑項目發(fā)展計劃
- 2025年魚、蝦、貝、藻類新品種合作協(xié)議書
- 成都七中??碱}數(shù)學試卷
- 廣播站工作參考計劃范文1
- 財產(chǎn)租賃協(xié)議
- 集裝箱租賃合同范本
- 《工程倫理學》配套教學課件
- 研究生英語閱讀教程(基礎級)第三版-課后習題答案
- 文件袋、檔案袋密封條模板
- 校本課程《典籍里的中國》教案
- 四年級上冊信息技術教案-9演示文稿巧編輯 |人教版
- 2022年人力資源管理各專業(yè)領域必備知識技能
- 租賃(出租)物品清單表
- 提高聚氯乙烯卷材地面一次驗收合格率
- 甲型H1N1流感防治應急演練方案(1)
- LU和QR分解法解線性方程組
- 漏油器外殼的落料、拉深、沖孔級進模的設計【畢業(yè)論文絕對精品】
評論
0/150
提交評論