Django 扩展User 编写自己的认证后台
2013-07-17 22:47
573 查看
前言
今天用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' , )
相关文章推荐
- Django 扩展User 编写自己的认证后台
- 给django admin后台管理user扩展下拉框及多选框的字段
- 编写自己的dojo扩展-zt
- 扩展Django:实现自己的manage命令
- 自己扩展django的过滤器
- django-自带admin后台如何给某些field赋默认值(比如user=request.user)然后隐藏它
- django不用在数据库中创建新的user表而使用它的后台管理功能
- 如何实现在自己编写的asterisk用户平台实现添加Extensions , sip ,user!
- django web项目的后台页面小扩展
- 自己动手编写Eclipse扩展点
- 06.Django中用户的两种扩展方式(Profile和AbstractUser)
- Django编写RESTful API(四):认证和权限
- Django 速成笔记(5) 扩展user字段 后台管理配置
- Django用户认证系统(一)User对象
- 自定义 Django的User Model,扩展 AbstractUser类注意事项
- django后台自带User,Group。下面是给admin添加自定义表,并为admin添加副文本编辑器
- python3开发进阶-Django框架的自带认证功能auth模块和User对象的基本操作
- json数据与JAVA数据的转换 jsonJavaBean.netApache 自己编写了一个工具类,处理页面提交json格式数据到后台,再进行处理成JAVA对象数据 1、DTO:Data T
- Django编写后台报错