Django---自定义认证
2018-12-01 11:00
323 查看
自定义认证:
一个用户可以通过用户名+密码登录,也可以通过手机号+密码登录
创建用户数据库:
系统自带一个User的数据库,但属性可能不是我们想要的,所以自己创建一个My_User数据库
现在settings中:
# 设置自定义用户 AUTH_USER_MODEL = "t06.MyUser
然后在models中:
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser): phone = models.CharField( max_length=13, verbose_name="手机号" ) # 如果是追加的字段 我们需要设置null=True 或者default age = models.IntegerField( verbose_name="年纪", default=1 )
注册:
if not My_User.objects.filter(username=name).exists():
exists():判断这个数据库里有没有这个数据,有就返回True;反之相反。
user = User.objects.create_user(username=name, password=pwd)
创建这个用户,用create_user
登录:
认证:
user1 = authenticate(username=name, password=pwd)
系统有一个autuenticate函数可以认证用户名和对应的密码。如果可以就返回这个用户user1,如果不可以就返回None。
重写函数autuenticate:
from django.contrib.auth.backends import ModelBackend from .models import MyUser class MyBackend(ModelBackend): def authenticate(self, request, username=None, password=None, **kwargs): # 找人 print("进入函数") try: user = MyUser.objects.get(username=username) print("没找到") except Exception: try: user = MyUser.objects.get(新认证属性=username) except Exception as e: print(username, e) return None print("拿到用户",user.username) # 密码校验 if user.check_password(password): return user else: return None
在settings中加入:
# 设置自定义认证 AUTHENTICATION_BACKENDS = ( "app名.auth.MyBackend", )
登录:
login(req, user1)
系统有login这个登录函数
logout(req)
系统有logout这个退出登录函数
阅读更多相关文章推荐
- Django自定义用户认证示例详解
- Django自定义用户表替换默认用户表认证
- 源码剖析Django REST framework的认证方式及自定义认证
- Django自定义用户认证系统之自定义用户模型
- 43)django-用户认证,授权,自定义用户认证
- django中的认证(含自定义认证)与登录
- Django rest framework 使用自定义认证方式
- 07.Django中的自定义认证方式和权限的设计与使用
- Django之博客系统:自定义认证
- 解决django中内置身份认证表单无法自定义渲染的问题
- django自定义用户认证后进不了带有@login_required的页面
- Django自定义UserModel并实现认证和登录
- Django -mongoDB(mongoengine)-自定义用户认证登录
- [py][mx]django自定义认证类-实现邮箱作为用户名登录
- Django使用自定义认证方式
- Django自定义用户认证系统Customizing authentication
- Django自定义认证方式用法示例
- Django2.0官方文档学习-自定义认证
- Django权限系统auth模块详解 转自:原文出处 auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理。 auth可以和admin模块配合使用, 快速建
- D django 用户认证系统