Django 扩展User 编写自己的认证后台51CTO博客 - 凯发娱乐

Django 扩展User 编写自己的认证后台51CTO博客

2019-03-06 10:20:29 | 作者: 鸿朗 | 标签: 后台,自己,认证 | 浏览: 1966

前语

今日用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 ,
)
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章