对与Django认证系统使用默认的auth就可以了,但默认的有时无法满足我们的业务需求,需要额外的定制才能满足,例如用户表,默认情况下是没有手机号,昵称,头像这些字段的,那如果我需要,怎么办?还有我们认证也仅支持用户名与密码,如果我想认证可以实现用户名或者邮箱或者手机号+密码方式认证呢?
今天我就要来解决下面的2个问题.
1)原先的user表字段
(username,password,first_name,last_name,email,last_login,is_superuser,is_staff,is_active,date_joined),仅有这10个,因我也需要记录用户手机号(可能还需要记录用户昵称,头像等,此案例中我仅扩展一个手机号字段,若添加其它字段则和此手机号字段一样),所以暂时看起来无法满足现在的需求,所以我们需要重新定义user表.
2)原先的认证,仅支持用户名+密码,现在我们需要实现(用户名或邮箱或手机号)+密码这种方式认证登录.
下面开始动手做起来.
1)启动一个user应用startappuser
2)定义一个UserProfile表
3)settings.py中设置
应用相关配置
INSTALLED_APPS = [
…………
‘user.apps.UserConfig’,
]
2 mysql数据库驱动
3 定义扩展的Auth表
“””
认证相关
“””
AUTH_USER_MODEL= ‘user.UserProfile’
3.4 定义一个静态文件路径,将css/js/image放与此目录下.
STATIC_URL =’/static/‘
STATICFILES_DIRS= (
os.path.join(BASE_DIR, “static”),
)
4)接下来去创建相应的表
makemigrations
migrate
查看mysql数据库,有相应的表与mobile字段.
5)设置一个超级用户,用与登录验证.
manage.py@django_edu> createsuperuser
…
Username: opdevos
Emailaddress: opdevos@opdevos.com
Warning:Password input may be echoed.
Password: admin123
Warning:Password input may be echoed.
Password(again): admin123
Superuser created successfully.
好了,数据准备工作做好了。我们就去写相关的逻辑程序与前台显示页面吧.
urls.py
views.py
此时需要在settings.py中设置自定义的认证.
“””
认证相关
“””
AUTH_USER_MODEL= ‘user.UserProfile’
设置邮箱或手机号或用户名均可登录
AUTHENTICATION_BACKENDS= (
‘user.views.CustomBackend’,
)
login.html
index.html
以下是验证相关图片.
访问
输入用户名+密码
退出,再用邮箱+密码登录.
退出,再用手机号+密码登录.
哈哈。看到没,三种登录方式都已经成功了.
对与数据检验,我这里没有去做,不过,可以在我下一篇实战用户注册这块来弥补.
领取专属 10元无门槛券
私享最新 技术干货