Django中session進行許可權管理的使用

2022-09-25 13:21:12 字數 3735 閱讀 3010

目錄

當session啟用後,傳遞給檢視request引數的httprequest物件將包含乙個session屬性,就像乙個字典物件一樣。你可以在django的任何地方讀寫request.session屬性,或者多次編輯使用它。

這個檔案在我的c:\users\17764530215\test\mysite位址

from django.contrib import admin

from django.urls import path

from login import views

urlpatterns = [

path('admin/', admin.site.urls),

path('index/', views.index),

path('login/', views.login),

path('register/', views.register),

path('logout/', views.logout),

]策略:

(wow,這其實就是我們的功能!!)

from django.db import models

# create your models here.

class user(models.model):

gender = (

('male', "男"),

('female', "女"),

)name = models.charfield(max_length=128, unique=true)

password = models.charfield(max_length=256)

email = models.emailfield(unique=true)

*** = models.charfield(max_length=32, choices=gender, default="男")

c_time = models.datetimefield(auto_now_add=true)

def __str__(self):

return self.name

class meta:

ordering = ["-c_time"]

verbose_name = "使用者"

verbose_name_plural = "使用者"

各欄位含義:

name: 必填,最長不超過128個字元,並且唯一,也就是不能有相同姓名; password: 必填,最長不超過256個字元(實際可能不需要這麼長); email: 使用django內建的郵箱型別,並且唯一; ***: 性別,使用了乙個choice,只能選擇男或者女,預設為男; 使用__str__方法幫助人性化顯示物件資訊; 元資料裡定義使用者按建立時間的反序排列,也就是最近的最先顯示;

views.login:

def login(request):

if request.ses程式設計客棧sion.get('is_login', none): # 不允許重複登入

return redirect('/index/')

if request.method == 'post':

login_form = forms.userform(request.post) #上一次填寫了這個表單,所以從這裡得到這個表單的資料

message = '請檢查填寫的內容!'

if login_form.is_valid():

username = login_form.cleaned_data.get('username')

password = login_form.cleaned_data.get('password')

try:

user = models.user.objects.get(name=username)

except :

message = '使用者不存在!'

return render(request, 'login/login.html', locals())

if user.password == password: #如果使用者名稱和密碼都成功

# 往session字典內寫入使用者狀態和資料:

request.session['is_login'] = true #is_login=true表示成功登陸

request.session['user_id'] = user.id

request.session['user_name'] = user.name

return redirect('/index/') #重定向到主頁

else:

message = '密碼不正確!'

return render(request, 'login/login.html', locals())

else:

return render(request, 'login/login.html', locals())

# 不是post的話,統統轉去login.html

login_form = forms.userform()

return render(request, 'login/login.html', locals())

我們進入login時,會去session裡面找is_login項,如果為true就表示已經登陸了,所以就重定向到/index/中,進入首頁.

如果為false,即沒有登陸,那麼往下走。如果是post方法,那麼執行一系列操作,如果不是post,就表示是第一次用get的方式登陸到這個login網頁的,那麼就用forms.userform產生乙個物件login_form,將其作為引數傳到login/login.html模板檔案中,待會再介紹這個檔案。

如果為false,且是post時,就表明是填寫了表單的,這裡就涉及很多業務邏輯和session的管理了,重點講。如果login_form.is_valid() 如下:通過login_form = forms.userform(request.post)得到填寫的這個表單資料,然後去和資料庫的使用者名稱密碼去驗證,如果通過了,那麼就將request.session['is_login']改為true,表示在登陸狀態,並且把user_id和user_name欄位也改成對應的資料,這個之後應該有用.

下面進入login/login.html

登入這裡重要的地方是這個語句——},在這個位置插入了乙個表單login_form,然後填寫好這個表單以後,用view裡面的login函式通過執行login_form = forms.userform(request.post)來獲取填寫的這個表單資料,然後去進行校驗等等操作...

有了這兩個,我們的許可權管理就基本完成了!本質上,這倆東西提供了一種機制————可以對輸入的使用者資料存在session裡,然後校驗的時候從session中取出,去判斷是否是合法的使用者。那麼,我們只需要再修改一下index.html,也是用session去校驗,這樣,直接通過**訪問的使用者,由於沒有session,就會被攔截!

def index(request):

if not request.session.get('is_login', none): #如果不在登陸狀態,就重定向到login

return redirect('/login/')

return render(request, 'login/index.html') #如果在登陸狀態,就進入index.html的模板檔案

這裡邏輯很清楚:如果不在登陸狀態,就重定向到login;如果在登陸狀態,就直接重定向到真正的login/index.html模板。在這麼模板中,我們就可以開發各種功能了,該demo中的login/index/html如下:

Django中session和cookie的用法

session 存在伺服器端,用request物件進行設定 設定session 在後端寫入 request.session money 100 缺省會在cookie中產生乙個sessionid 獲取session值 只能在後端獲取 print request.session.get money co...

Django中session的使用

1 存在於服務端的鍵值對 2同乙個瀏覽器不允許登入多個賬戶,不同瀏覽器可以登入同乙個賬戶 3session的使用 必須遷移資料 增 request.session name lqz 查 request.session name 改 request.session name egon 刪 del re...

Django的session中對於使用者驗證的支援

使用者與authentication 通過session,我們可以在多次瀏覽器請求中保持資料,接下來的部分就是用session來處理使用者登入了。當然,不能僅憑使用者的一面之詞,我們就相信,所以我們需要認證。當然了,django 也提供了工具來處理這樣的常見任務 就像其他常見任務一樣 django ...