django学习日志之自定义用户扩展
django 为我们提供了强大的用户认证系统,并且提供了基于该系统的User模型,所以,很多时候,我们有必要对自己的user进行业务扩展,得到满足我们自己业务需求的user。借此,写下自己的感悟。
user内置属性如下:
username
用户名,必需字段。30个字符或更少,包含 _, @, +, . 和 - 字符。
first_name
可选。 <=30字符.
last_name
可选。 <=30字符r.
email
邮箱,可选。 Email地址.
password
密码,必需。Django不是以明文存储密码的,而是存储哈希值。
以及两个外键:
groups
用户组。
user_permissions
用户权限。
很明显,这些很多时候是不够用的。
但是,我学会了两种扩展方法。
第一种,很明显我们用一对一关系就可以扩展自己的属性了吧,比如,我想要加个address地址属性。
首先系统的User对象模型在django.contrib.auth.models里面,然后写自己的模型,建立一对一关系,我的代码如下
#app里面的models模块
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class UserProfile(models.Model):
user = models.OneToOneField(User)
address = models.CharField(max_length=100)
好makemigrations和migrate(关于迁移可以参考官方文档)进数据库先。
admin应该知道吧,让我看看到底长什么样,于是,在控制台python manage.py createsuperuser创建个admin。

长这样,当然不是我们希望的,这种扩展,不管用在什么时候,就算是自己对自己模型的扩展,也不是完美的,然而admin系统也提供了一些自定义的样式,应该说提供了很多。其中我们可以让两个模型一起显示吧。
#原来的admin.py文件
from django.contrib import admin
from blog.models import *
# Register your models here. admin.site.register(UserProfile)
这是原来的admin,我修改成这样
from django.contrib import admin
from blog.models import *
# Register your models here.
class ProfileInline(admin.StackedInline):
model = UserProfile
verbose_name = 'profile' class UserAdmin(admin.ModelAdmin):
inlines = (ProfileInline,) admin.site.register(User,UserAdmin)
register第二个参数我们传了UserAdmin,意思是用一个自定义的admin模型来修饰,具体细节官方文档有很多,用inlines 修饰,这里写一个inlne类进去,就像上面的ProfileInline一样,我们想要插入的是模型填了我们扩展的UserProfile.然后定意思了一个verbose_name,这是它的名字,好了现在admin变成什么样了,我来看一下。
对了,出错了,他说User已经注册了。所以我在admin.site.register上面加了一句admin.site.unregister(User),因为默认系统是注册了User对象。
好再看看,成功!
先上一页系统自己的row吧

然后看看是否有扩展:

可以看到我们自己的扩展地址:address栏,至此,也就扩展成功了。
第二张方法,django模型系统,自带继承,我们可以用继承来实现。
在models.py里面,我们写入如下模型,继承系统的AbstractUser
这种方法和系统User的耦合度非常好
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here. class User(AbstractUser):
address = models.CharField(max_length=100)
当然,系统默认还是自带的user,需要在setting文件里面把系统默认user替换写入如下语句

blog是我的app名字,根据自己app设置
然后在admin里面注册自己的User就行了。
看看效果如何:

address出现了,同时我们会发现这个User是在系统原来的User里的。
django学习日志之自定义用户扩展的更多相关文章
- Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录
一,项目题目:扩展Django自带User模型,实现用户注册与登录 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册,登录,用户认证,注销,修改密码等功能. ...
- Django学习手册 - 初识自定义分页
核心: <a href='http://127.0.0.1:8000/index-%s'>%s<a> 自定义分页 1.前端处理字符 后端的字符 return render(r ...
- Django学习系列10:保存用户输入——编写表单,发送POST请求
要获取用户输入的待办事项,发送给服务器,这样才能使用某种方式保存待办事项,然后在显示给用户查看. 上次运行测试指出无法保存用户的输入.现在,要使用HTML post请求. 若想让浏览器发送POST请求 ...
- Django学习路13_创建用户登录,判断数据库中账号名密码是否正确
在 models.py 中设置数据库表的信息 from django.db import models # Create your models here. class User(models.Mod ...
- Django学习(五)---模板扩展,开发博客页面
(一)博客主页面开发 1.模板中可使用for循环,语法格式为: {% for xs in xxs %} HTML语句 {% endfor %} 2.更改app下的views.py, 获取后台model ...
- Django学习笔记(9)—— 开发用户注册与登录系统
一,项目题目: 开发用户注册与登录系统 该项目主要练习使用Django开发一个用户注册与登录的系统,通过这个项目然后巩固自己这段时间所学习的Django知识. 二,项目需求: 开发一个简单的用户登录与 ...
- Django学习笔记(18)——BBS+Blog项目开发(2)主体思路及流程
这篇博客主要完成一个BBS+Blog项目,那么主要是模仿博客园的博客思路,使用Django框架进行练习. 准备:项目需求分析 在做一个项目的时候,我们首先做的就是谈清楚项目需求,功能需求,然后才开始写 ...
- Windows phone 自定义用户控件(UserControl)——ColorPicker
编码前 学习Windows phone自定义用户控件,在<WPF编程宝典>学习的小例子.并根据windows phone稍微的不同,做了点修改.ColorPicker(颜色拾取器):拥有三 ...
- Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API
用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...
随机推荐
- override与final
override 强调该函数是重写的父类的函数 final 指定该函数不能被重写 两者都是针对virtual 函数
- 夺命雷公狗—angularjs—20—$watch监听的用法
- linux中使用软链接时出现 too many levels of symbolic links
刚开始使用的源文件的路径是相对路径,所以导致标题中的这种错误. 只要用绝对路径表示源文件就好了.如果用相对路径的话,实际相对的是目标文件所在的路径,而在创建链接文件时用的路径是相对于当前的路径.
- 《zw版·Halcon-delphi系列原创教程》 2d照片-3d逆向建模脚本
<zw版·Halcon-delphi系列原创教程> 2d照片-3d逆向建模脚本 3D逆向建模,是逆向工程的核心要素. 3D逆向建模,除了目前通用的3D点云模式,通过2D图像实现 ...
- zw·准专利·高保真二值图细部切分算法
zw·准专利·高保真二值图细部切分算法 高保真二值图细部切分算法,是中国字体协会项目的衍生作品. 说准专利算法,是因为对于图像算法的标准不了解,虽然报过专利,但不是这方面的,需要咨询专 ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON FillUpShape1
zw版[转发·台湾nvp系列Delphi例程]HALCON FillUpShape1 procedure TForm1.Button1Click(Sender: TObject);var img : ...
- 衣明志是个SB
面试碰到衣明志,问了些傻逼问题,尼玛就是一不折不扣的蠢驴. 这个人太能装了,而且水平也不咋地.
- input放在a标签里面不能选择input里面的文本,IE9点击失效
input放在a标签里面不能选择input里面的文本,IE9点击失效 在IE浏览器中<input type="text" value="test" /&g ...
- 转:redis常用命令
一 Redis介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发 ...
- android 使用WebView 支持播放优酷视频,土豆视频
看了很多文章和所谓的解决android WebView播放优酷,土豆等视频的办法,都是什么 setPluginsEnabled,在android 4.x之后都不好使,压根就没这函数,因为android ...