Django拡張User独自の認証バックグラウンドを作成
前言
今日djangoでwebプラットフォームを書くには、アカウント管理が必要です.もちろん、最初の時間にDjangoの強力なUserモデル、各種権限の制御、sessionの管理がスピードで解決されたことを考えました.しかし、Djangoの管理システムは自分のバックグラウンドデータベースUserオブジェクトと密接に接続されていますが、Django Userデータベースを私のバックグラウンドデータベースとして使用することを望んでいません.関連資料を調べてみると、自分の認証バックグラウンド解決を書くことができることに気づきました.
インプリメンテーション
実装方法は,自分の認証バックグラウンドを作成し,登録するたびにauthenticateメソッドで自分のバックグラウンドデータ中のユーザを対応するDjango Userオブジェクトに挿入することである.これによりDjangoの認証にシームレスに結合し、Djangoの強力な認証バックグラウンド機能を楽しむことができます.
1.独自のバックグラウンドモジュールの作成
2.models.py
3.auth.py
認証バックグラウンドは、get_user(id)とauthenticate(**credentials)、私はauthenticateで手足を動かしています.
4.admin.py
自分のバックグラウンドデータベーステーブルもdjangoの管理システムに追加します
5.最後にsettings.pyに独自の認証バックグラウンドを追加し、完了
今日djangoでwebプラットフォームを書くには、アカウント管理が必要です.もちろん、最初の時間にDjangoの強力なUserモデル、各種権限の制御、sessionの管理がスピードで解決されたことを考えました.しかし、Djangoの管理システムは自分のバックグラウンドデータベースUserオブジェクトと密接に接続されていますが、Django Userデータベースを私のバックグラウンドデータベースとして使用することを望んでいません.関連資料を調べてみると、自分の認証バックグラウンド解決を書くことができることに気づきました.
インプリメンテーション
実装方法は,自分の認証バックグラウンドを作成し,登録するたびにauthenticateメソッドで自分のバックグラウンドデータ中のユーザを対応するDjango Userオブジェクトに挿入することである.これによりDjangoの認証にシームレスに結合し、Djangoの強力な認証バックグラウンド機能を楽しむことができます.
1.独自のバックグラウンドモジュールの作成
myauth/
├── admin.py
├── auth.py
├── __init__.py
└── models.py
2.models.py
# -*- coding: utf-8 -*-
from django.db import models
import hashlib
# .account
class Account(models.Model):
username = models.CharField(u" ",blank=True,max_length=32)
password = models.CharField(u" ",blank=True,max_length=50)
domain = models.CharField(u" ",blank=True,max_length=256,help_text=' , , ')
is_active = models.IntegerField(u"is_active",blank=True)
phone = models.CharField(u" ",max_length=50)
mail = models.CharField(u" ",max_length=50)
def __unicode__(self):
return self.username
def is_authenticated(self):
return True
def hashed_password(self, password=None):
if not password:
return self.password
else:
return hashlib.md5(password).hexdigest()
def check_password(self, password):
if self.hashed_password(password) == self.password:
#if password == self.password:
return True
return False
class Meta:
db_table = "account"
3.auth.py
認証バックグラウンドは、get_user(id)とauthenticate(**credentials)、私はauthenticateで手足を動かしています.
# -*- coding: utf-8 -*-
from django.contrib.auth.models import User
from myauth.models import Account
class MyCustomBackend:
def authenticate(self, username=None, password=None):
try:
user = Account.objects.get(username=username)
except Account.DoesNotExist:
return None
else:
if user.check_password(password):
try:
django_user = User.objects.get(username=user.username)
except User.DoesNotExist:
# django ,
django_user = User(username=user.username,password=user.password)
django_user.is_staff = True
django_user.save()
return django_user
else:
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
4.admin.py
自分のバックグラウンドデータベーステーブルもdjangoの管理システムに追加します
from myauth.models import Account
from django.contrib import admin
admin.site.register(Account)
5.最後にsettings.pyに独自の認証バックグラウンドを追加し、完了
AUTHENTICATION_BACKENDS = (
'myauth.auth.MyCustomBackend' ,
)