【Django | allauth】useprofile 用户模型扩展
🤵♂️ 个人主页: @计算机魔术师👨💻 作者简介:CSDN 内容合伙人,全栈领域优质创作者。🌐 推荐一款找工作神器网站: 宝藏网站 |笔试题库|面试经验|实习招聘内推|
该文章收录专栏✨---【Django | 项目开发】从入门到上线 专栏---✨
@[toc]
一、配置项目 & 创建文件
创建应用users
在项目setting
文件加上 app
注意!!!: 在 引入 扩展模型应用路由时 allauth 应用 和 userprofile 谁在上方一定要考虑好,不然路由覆盖等会出现页面失效或者报错的情况!!(一般默认 allauth 在上方)
项目 urls.py
在userprofile
应用的models.py
创建扩展模型(添加字段)
在
admin
文件 注册UseProfile
模型
三板斧启动服务器(现使用 sqlite 数据库,后面再迁移至 mysql)
注册成功
二、 建立表单
在应用下建立文件forms.py
,并重写表单,
由于注册表单时,只会自定创建 user 对象,并没有创建 userprofile 并自动与扩展模型 userprofile 进行关联,所以需要重写注册表单,并修改默认注册表单配置,注册时两个对象一起被创建,并存储到数据库中。这点非常重要。通过重写表单,你还可以很容易添加其它字段。
2.1 重写注册表单
有两种方法实现
1)自定义表单类 (这里的需求是需要附加输入,建议使用这种方法)
注意!!! : 自定义表单 在配置好之后,是直接引入到 allauth.account,forms 的,这个时候是不能使用 重写的继承方法的!,不然引入父类的操作会陷入调用循环!
原理: allauth 应用 根据 setting 中的
account_signup_form_class
的值(路由)引入该表单类,将该表单类的方法siginup
替换掉原生注册表单
在
setting
加上表单配置
2)重写表单( 继承表单类)
不需要和自定义一样引入表单,直接定向到该表单(所以不会出现引用循环)
在
setting
加上表单配置
三、 view 视图函数与 URLs
userprofile 的
urls.py
views.py
特别注意!!: 之前文章所注册的用户,在注册时没有生成
userprofile
对象,在user_profile = get_object_or_404(UserProfile, user=user)
这里会报错,所以我们得先注册一个新用户。(修改了注册表单)
四、 创建 proflie 模板和 proflie_update 模板
在allauth
包中复制粘贴templates
的account
包到该项目的templates
的account
下,原因:
便于模板覆盖
便于修改表单
添加
profile.html
文件
profile_update.html
我们也可以看看
form
表单直接渲染得源代码
五、登入 admin 管理系统
特别注意!!:我们在登录用户之后,此时系统是记录我们的用户信息的,而此时如果我们更改路径到 admin 中,输入我们的管理员账号会报 提供了两个参数的信息,这是因为管理员的用户信息和当前用户信息冲突了,需要
signout
当前用户
当输入密码错误时也会报和上面一样的错误(当时调试了好久😂)
效果:
参考文献:扩展用户自带模型(allauth)扩展用户自带user模型(非allauth实现)外键related_namedef _ str_ (self)def _ str_ (self)verbose_name表单模型和表单的使用
版权声明: 本文为 InfoQ 作者【计算机魔术师】的原创文章。
原文链接:【http://xie.infoq.cn/article/bf27793e46eb5caab19114b5b】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论