扩展用户模型:

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. Java连载73-String方法简介

    一.字符串常用的方法 package com.bjpowernode.java_learning; ​ public class D73_StringMethodBriefIntroduction { ...

  2. 小程序封装request请求

    //request.js var host = 'https://www.xxx.com';//请求域名 module.exports = function (type, params, method ...

  3. 处理方法返回值void

    1.默认响应效果:根据请求url寻找相应页面 1.1.配置的视图解析器 <!--配置视图解析器--> <bean id="internalResourceViewResol ...

  4. P2746 [USACO5.3]校园网Network of Schools [tarjan缩点]

    题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 BB 在 AA 学校的分发列表中,AA 也不一定在 BB 学校的列表中. ...

  5. 飘扬的旗帜!shader 编程实战!Cocos Creator!

    用 shader + mesh 立个 flag 吧! 文章底部获取完整代码! 效果预览 使用方法 创建一个空节点 添加用户脚本组件 mesh-texture-flag 添加图片 修改对应属性 实现原理 ...

  6. 证明task线程是来源于线程池的,线程重用

    1.线程池是单例的,全局唯一的,设置线程池最大活跃线程数是5,设置后,允许同时并发的Task只有5个,我们开启100个task去做任务,从最后的输出结果看到,虽然开启了100个task,但是线程id始 ...

  7. JS中require函数的警告提示

    在JS中常常使用require函数来引入文件或者路径,不过在使用时需要注意一点,它的参数必须是一串完整的字符串常量或者是由字符常量与变量拼接. (一)require函数的参数为一个变量,如下图所示: ...

  8. 重启监听卡在connecting to的问题

    问题描述:lsnrctl start启动监听起不来,一直卡在connecting to半天 1.[oracle@orcl ~]$ lsnrctl start 一直卡半天,就是连不上,按照以前的解决办法 ...

  9. Python GUI编程(TKinter)(简易计算器)

    搞课设搞得心累,现在看到人脸这两个字就烦躁,无聊搞搞tkinter,实现一个计算器的功能,能够简单的加减乘除. 简单的页面如下: 简单的代码如下: # encoding:utf-8 import tk ...

  10. axios 跨域请求允许带cookie,则服务器Access-Control-Allow-Origin应设置为具体域名,否则请求无法获得返回数据

    1.通过允许跨域访问实现了跨域请求,但为了使每个请求带上session信息,我设置了withCredentials ,即: axios.defaults.withCredentials = true ...