扩展用户模型:

Django内置的User模型虽然已经足够强大了,但是有时候还是不能满足我们的需求,比如在验证用户登录的时候,它用的是用户名作为验证,而我们有时候需要通过手机号码或者是邮箱进行验证,还有比如我们想要增加一些字段,那么这时候我们就需要扩展用户模型了,扩展用户模型有多种方式。

1.设置Proxy模型(设置代理的形式):

如果你对Django中提供的字段,已经验证方式都比较满意,最主要的就是不需要添加任何的字段,只是需要在原有的基础上增加一些操作的方法,那么建议使用这种方式,这种方式操作起来非常简单,并且可以通过代理的形式来为原有的模型定义一些方法、属性等,但是不能再原有字段的基础上定义其他的字段。models.py文件示例代码如下:
from django.db import models
from django.contrib.auth.models import User class Person(User):
class Meta:
<!--设置proxy=True,标记该模型不用映射到数据库中,只是一个代理-->
proxy = True <!--定义一个类方法,cls就是当前的类对象,即user-->
@classmethod
def get_blacklist(cls):
return cls.objects.filter(is_active=False)
在views.py文件中,应用User代理模型定义的方法get_blacklist()获取所有的is_active为False的用户。
from .models import Person
from django.http import HttpResponse
from django.contrib.auth.models import User
from django.shortcuts import render def index(request):
users = Person.get_blacklist()
if users:
print(type(users))
for user in users:
print(user.username)
context = {
'users': users
}
return render(request, 'proxy.html',context=context)
else:
context = {
'users': '没有查找到诶!'
}
return render(request, 'proxy.html', context=context)
在proxy.html中接收视图函数中的上下文。
<ul>
{% for user in users %}
<li>未激活的账号:{{ user.username }}</li>
{% endfor %} </ul>

在浏览器中,就会显示当前数据库中is_active为False的用户。

在以上示例中,我们定义了一个Person类,继承自User,并且在Meta中设置了proxy=True,说明这个只是User的一个代理模型。它并不会影响原来User模型在数据库中的表的结构。以后如果你想方便的获取所有黑名单的人(账号不能使用的用户),那么就可以通过Person.get_blacklist()就可以获取到,并且User.objects.all()和Person.objects.all()是相同的,因为他们都是从User这个模型中获取所有的数据。

最新文章

  1. JS图片自动和可控的轮播切换特效
  2. Python3
  3. haslayout详解
  4. 响应性web设计实战总结(二)
  5. [iOS]利用系统NSRegularExpression使用正则表达式
  6. log4j:ERROR LogMananger.repositorySelector was null likely due to error in class reloading, using NOPLoggerRepository.
  7. MySQL提示:The server quit without updating PID file问题的解决办法
  8. asp:get请求写法
  9. Matlab 图像预处理
  10. CSharpGL(45)自制控件的思路
  11. Java核心-多线程-并发控制器-CyclicBarrier同步屏障
  12. 板载 SPI-FLASH 的烧写方法
  13. Macbook外接显示器模糊解决方法
  14. PAT基础6-1
  15. Three.js粒子特效,shader渲染初探(一篇非常详细的介绍)
  16. 2k8 32bit下载
  17. telerik:RadGrid 在表格中编辑更新数据
  18. JDK5的新特性:泛型、可变参数、静态导入
  19. C#迭代器、装箱/拆箱、重载等
  20. [递推+矩阵快速幂]Codeforces 1117D - Magic Gems

热门文章

  1. linux 基础入门(9) 系统服务 systemctl 与 xinted的运用
  2. python实现串口通讯小程序(GUI界面)
  3. Foxmail for windows 客户端设置和 IMAP、POP3/SMTP 的设置
  4. mysql 主主备份
  5. vue更改数组中的值
  6. 《手把手教你构建自己的 Linux 系统》学习笔记(7)
  7. 基于java开发jsp+ssm+mysql实现的在线考试系统 源码下载
  8. Windows显示默认桌面图标(计算机,用户的文件,网络,控制面板,回收站)
  9. 剑指offer-面试题57_2-和为s的连续正数序列-穷举法
  10. android中常用的布局管理器(二)