Django2.0中文(与其他应用交互)

1、python manage.py inspectdb 根据DB生成model
默认中已经存在DB如下:
CREATE TABLE alarm_group (
group_name varchar(250) NOT NULL,
group_des blob,
members blob,
timestamp datetime NOT NULL,
on_duty blob,
leader blob,
PRIMARY KEY (group_name)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
运行:python manage.py inspectdb
将生成:
class AlarmGroup(models.Model):
group_name = models.CharField(primary_key=True, max_length=250)
group_des = models.TextField(blank=True, null=True)
members = models.TextField(blank=True, null=True)
timestamp = models.DateTimeField()

class Meta:
    managed = False
    db_table = 'alarm_group'

2、调用其他认证系统:
将Django与其他先由认证系统的用户名和密码或者认证方法进行整合。
例如:你所在公司也许已经安装了LDAP,并且为每一个员工都存储了性硬的用户名和密码。如果用户在LADP和基于Django的应用上拥有独立的帐号,那么这是无论对于网络管理员还是用户自己来说都是一件很令人头疼的事情。为了解决这样的问题,Django认证系统能让你以插件的方式与其他认证资源进行交互,可以覆盖Django默认的基于数据库的模式,还可以使用默认的系统与其他系统进行交互。
指定认证后台
在后台,Django维护了一个用于检查认证的后台列表。当某个人调用django.contrib.auth.authenticate()时,Django会尝试对其认证后台进行遍历认证。如果第一个认证失败,Django会尝试认证第二个,以此类推,直到认证完。
认证后台列表在AUTHENTICATION_BACKENDS设置中进行指定。
默认情况下,
('django.contrib.auth.backends.ModelBackend',)
用来检测Django用户数据库的基本认证模式。
编写认证后台
一个认证后台其时就是一个实现了:get_user(id) 和 authenticate(**credentials),方法get_user(id)需要一个参数id,id可以是用户名,数据库ID或者其他任何数值,该方法会返回一个User对象。
from django.conf import settings
from django.contrib.auth.models import User, check_password
class SettingsBackend(object):
"""
Authenticate against the settings ADMIN_LOGIN and ADMIN_PASSWORD.
Use the login name, and a hash of the password. For example:
ADMIN_LOGIN = 'admin'
ADMIN_PASSWORD = 'sha1afbcf42e21bd417fb71db8c66b321e9fc33051de'
"""
def authenticate(self, username=None, password=None):
login_valid = (settings.ADMIN_LOGIN == username)
pwd_valid = check_password(password, settings.ADMIN_PASSWORD)
if login_valid and pwd_valid:
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
# Create a new user. Note that we can set password
# to anything, because it won't be checked; the password
# from settings.py will.
user = User(username=username, password='get from settings.py')
user.is_staff = True
user.is_superuser = True
user.save()
return user
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None

你可能感兴趣的:(Django2.0中文(与其他应用交互))