3
因爲我不想使用Django在建造認證系統(也許我應該做的,請告訴我,如果是這樣的話),我創建了一個簡單的小AUTH類:使用django進行自定義身份驗證?
import random
import hashlib
from myapp import models
class CustomerAuth:
key = 'customer'
def __init__(self, session):
self.session = session
def attempt(self, email_address, password):
password_hash = hashlib.sha1(password).hexdigest()
try:
return models.Customer.objects.get(
email_address=email_address,
password_hash=password_hash)
except models.Customer.DoesNotExist:
return None
def login(self, customer):
self.session[self.key] = customer
def logout(self):
if self.session.has_key(self.key):
self.session[self.key] = None
def is_logged_in(self):
return self.session.has_key(self.key)
and self.session[self.key] != None
def get_active(self):
if self.is_logged_in():
return self.session[self.key]
else:
raise Exception('No user is logged in.')
def redirect_to_login(self):
return HttpResponseRedirect('/login/')
def redirect_from_login(self):
return HttpResponseRedirect('/account/')
的問題是,那個時候我想用它來阻止未經授權的訪問,我都用這個代碼片斷中的每一個觀點方法:
def example(req):
auth = CustomerAuth(req.session)
if not auth.is_logged_in():
return auth.redirect_to_login()
正如你可以想像,這會產生相當醜陋的和重複的代碼。什麼是更好的方式來做到這一點?我應該使用Django的身份驗證框架嗎?
謝謝 - 現在就實施它。令人驚訝的是,這很容易做到。另外,我不需要使用username屬性,即使它是「必需的」(因爲我想用電子郵件地址進行身份驗證)。 – 2009-11-24 21:18:41