扩展用户模型:

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这个模型中获取所有的数据。

162.扩展User模型-使用Proxy模型的更多相关文章

  1. Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录

    一,项目题目:扩展Django自带User模型,实现用户注册与登录 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册,登录,用户认证,注销,修改密码等功能. ...

  2. Asp.net管道模型(管线模型)

    Asp.net管道模型(管线模型)   前言 为什么我会起这样的一个标题,其实我原本只想了解asp.net的管道模型而已,但在查看资料的时候遇到不明白的地方又横向地查阅了其他相关的资料,而收获比当初预 ...

  3. Paip.Php Java 异步编程。推模型与拉模型。响应式(Reactive)”编程FutureData总结... 1

    Paip.Php  Java 异步编程.推模型与拉模型.响应式(Reactive)"编程FutureData总结... 1.1.1       异步调用的实现以及角色(:调用者 提货单) F ...

  4. 图像切割之(五)活动轮廓模型之Snake模型简单介绍

    图像切割之(五)活动轮廓模型之Snake模型简单介绍 zouxy09@qq.com http://blog.csdn.net/zouxy09 在"图像切割之(一)概述"中咱们简单了 ...

  5. Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件

    Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...

  6. 切割图像(五)主动轮廓模型Snake简要模型

    切割图像(五)主动轮廓模型Snake简要模型 zouxy09@qq.com http://blog.csdn.net/zouxy09 在"图像切割之(一)概述"中咱们简单了解了眼下 ...

  7. GPU的线程模型和内存模型

    遇见C++ AMP:在GPU上做并行计算 Written by Allen Lee I see all the young believers, your target audience. I see ...

  8. 二 Djano模型层之模型字段选项

    字段选项 以下参数是全部字段类型都可用的,而且是可选的 null 如果为True,Django将在数据库中将空值存储为NULL.默认值为False 对于字符串字段,如果设置了null=True意味着& ...

  9. 产生式模型(生成式模型)与判别式模型<转载>

    转自http://dongzipnf.blog.sohu.com/189983746.html 产生式模型与判别式模型 产生式模型(Generative Model)与判别式模型(Discrimiti ...

随机推荐

  1. 知名KMS模拟器的官方发布网址

    些知名KMS模拟器的官方发布网址: 本机自激活安装类KMS激活软件,容易在系统升级中被查杀失效,且在软件传播过程中极易被捆绑植入后门.病毒,不推荐尝试. Windows Loaderhttps://f ...

  2. 【idea激活码】,【WebStorm激活码】,【DataGrip激活码】,【IntelliJ 全家桶系列】,【定期更新】,【第一期】

    IntelliJ IDEA.PyCharm.PhpStorm.WebStorm.RubyMide.AppCode.CLion.GoLand.DataGrip.Rider.Android Studio可 ...

  3. 使用font-weight无法调节字体粗细的问题解决

    最近我遇到这样的问题,就是使用font-weight无法调节字体粗细. 据我所知,font-weight是用于调节字体粗细的,可选100.200.300.400(normal).500.600.700 ...

  4. Electron+Vue – 基础学习(2): 项目打包成exe桌面应用

    项目创建完成,启动正常,接下来就是项目打包了.将测试Demo打包成exe桌面应用,点击exe文件,运行项目. 书接上文,创建项目有三种方式 Git拷贝.直接创建:通过electron社群提供的命令行工 ...

  5. Eclipse 如何添加 更换字体(转载)

    1. 打开eclipse-->Window-->Preferences-->General-->appearance-->Colors and Fonts, 点开后选择B ...

  6. 解决jmeter5.1高版本linux CPU,IO,Memory监控性能测试 java.lang.NoSuchMethodError: org.apache.jmeter.samplers.SampleSaveConfiguration.setFormatter(Ljava/t

    jmeter中也可以监控服务器的CPU和内存使用情况,但是需要安装一些插件还需要在被监测服务器上开启服务. 安装性能监控插件(jmeter-plugins)后报如下错误,是由于jmeter版本过高jm ...

  7. C语言 杂货整理

    C语言 杂货整理 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include ...

  8. Vue项目中实现tab栏和步骤条的数据联动

    也就是tab栏切换步骤条随之变化 <template>   <div>     <!-- 面包屑导航  -->     <el-breadcrumb sepa ...

  9. 通过sd文件发布的FeatureAccess服务不能查看到图层

    发布服务有两种方法, 1. 用ArcMap --Share As - service --publish a service 此方法可以直接将地图数据发布到ArcGIS  Server 的地图服务中, ...

  10. Python带你来一次说走就走的环球旅行

      image 1.目 标 场 景 十一长假,相信大部分的朋友这会应该是在全国各地浪或者是在浪的路上,朋友圈成为你们表演的场所. 当然,也有一小戳朋友是选择家里蹲,你们是否感觉到无聊?是否想出去浪,参 ...