Django之部落格系統 自定義認證

2022-05-30 21:36:10 字數 3094 閱讀 4427

前面我們在登入的時候,是通過輸入使用者名稱和密碼來進行認證

user=authenticate(username=cd['username'],password=cd['password'])

這個是通過後台設定的django.contrib.auth.backends.modelbackend來生效的。預設的modelbackend

通過資料庫使用

django.contrib.auth

中的user

模型(model

)來認證(

authentication

)使用者。

當你使用django.contrib.auth

的authenticate()

函式,django

會通過每乙個定義在

authentication_backends

中的後台乙個接乙個地嘗試認證(

authentication

)使用者,直到其中有乙個後台成功的認證該使用者才會停止進行認證。只有所有的後台都無法進行使用者認證(

authentication

),他或她才不會在你的站點中通過認證(

authentication

)。django提供了乙個簡單的方法來定義你自己的認證(

authentication

)後台。乙個認證(

authentication

)後台就是提供了如下兩種方法的乙個類:

但是如果我們想通過其他方式進行認證,比如註冊的郵箱來認證。我們就需要建立乙個認證(authentication

)後台讓使用者在我們的站點中使用他們

e-mail

替代他們的使用者名稱來進行認證(

authentication

)。在blog

應用中新增乙個

authentication.py

檔案,**如下:

from django.contrib.auth.models import user

class emailauthbackend(object):

def authenticate(self,username=none,password=none):

try:

user_list=user.objects.filter(email=username)

print len(user_list)

if len(user_list) > 1:

user=user_list[0]

else:

user=user_list

if user.check_password(password):

return user

return none

except user.doesnotexist:

return none

def get_user(self,user_id):

try:

return user.objects.get(pk=user_id)

except user.doesnotexist:

pass

return none

在這裡通過user_list=user.objects.filter(email=username)得到所有通過email

註冊的使用者。這裡由於其面在新增使用者的時候都是通過輸入相同的

email

位址,所以這裡採用了

user.objects.filter

函式,如果每個使用者的郵箱位址不一樣,則通過

user.objects.get

函式來獲得使用者就可以了。

以上**完成了以下工作內容:

authentication_backends=(

'django.contrib.auth.backends.modelbackend',

'blog.authentication.emailauthbackend'

通過這種設定,我們保留預設的modelbacked

用來保證使用者仍然可以通過使用者名稱和密碼進行認證,接著我們包含進了我們自己的

email-based

認證(authentication

)後台那麼在登入介面中,在username

中輸入使用者名稱和郵箱都可以通過驗證。

下面介紹第三方認證:

'social_django',  )  

中新增應用(

settings.py

)更新資料庫:

python manage.py migrate

在認證後端新增qq

認證以及

qq互聯的

key和id(

settings.py

). 注意:這個

key和

id需要到

qq去申請

authentication_backends = (  

'social_core.backends.qq.qqoauth2',   

social_auth_qq_secret = 'you qq seckey ,combined by letter with number,for examle: f123bas324' # qq secrect_key  

social_auth_qq_use_openid_as_username = true  

新增根urls.py

的url

路由 urlpatterns = [  

url('', include('social_django.urls', namespace='social'))  

在需要登入的地方加上如下**: 

qq登入 

settings.py中的tempaltes如下:

templates = [  

'options': {  

'context_processors': [  

'social_django.context_processors.backends',  

'social_django.context_processors.login_redirect',  

SpringSecurity自定義登入認證

spring security預設的登入表單只有username和password,但實際業務中我們可能需要使用其他的字段校驗,因此需要重寫認證部分。springsecurityfilterchain org.springframework.web.filter.delegatingfilterpr...

Django 之自定義頭部資訊

當我們使用 django 來搭建一套網頁系統,有時候我們會需要在網頁裡加入一些資訊,比如宣示版權之類的資訊,而如果在每乙個需要渲染的頁面都加上這些資訊,會比較麻煩。而在 django 裡有乙個中介軟體 middleware 可以幫助我們實現這個功能而不需要在每乙個返回的 html 頁面都手動加上。使...

Django之自定義分頁元件

from django.utils.safestring import mark safe mark safe 安全字串 class mypage def init self,page num,page num count,req path,per page num,page num show se...