django扩展用户一对一关联

1、app01/models.py里面创建模型UserExtension, 一对一关联User

from django.db import models
from django.contrib.auth.models import  User
from django.dispatch import receiver
from django.db.models.signals import  post_save

class UserExtension(models.Model):
    user = models.OneToOneField( User, related_name="extension", on_delete= models.CASCADE )
    telephone = models.CharField(max_length=11)
    school  = models.CharField(max_length=100)

‘‘‘sender  发送者instance 代表调用的对象created 是否是新创建    如果是新建User对象, 则User扩展对象UserExtension里面创建与User的关联    如果不是新建, User保存一次, 则User扩展对象UserExtension也自动保存‘‘‘

@receiver(post_save, sender = User)
def create_user_extension( sender, instance, created, **kwargs ):
    if created:
        UserExtension.objects.create( user = instance)
    else:
        instance.extension.save()

2、执行makemigrations和migrate, 同步映射数据库

2、app01/views.py视图调用扩展模型,创建User和UserExtension对象

from django.shortcuts import render, HttpResponse
from django.db import  connection
from django.contrib.auth.models import  User
def test(request):
    user = User.objects.create_user( username="zhiliao3", password="333333", email="[email protected]" )
    user.extension.telephone = "18888688888"
    user.save()
return  HttpResponse("success")

通过url: http://127.0.0.1:8080/test访问后,数据库就创建User和UserExtension相关的数据:

3、若需要使用 telephone和password方式验证用户,需要自定义验证方法

from django.shortcuts import render, HttpResponse
from django.db import  connection
from django.contrib.auth.models import  User

def my_authenticate(telephone, password):
    user = User.objects.filter( extension__telephone= telephone ).first()
    if user:
        is_correct =  user.check_password( password)
        if is_correct:
            return user
        else:
            return None
    else:
        return None

def test(request):
    # user = User.objects.create_user( username="zhiliao3", password="333333", email="[email protected]" )
    # user.extension.telephone = "18888688888"
    # user.save()

    telephone = request.GET.get("telephone")
    password = request.GET.get("password")
    user = my_authenticate( telephone, password)
    if user:
        print("验证成功:%s" % user.username)
    else:
        print("验证失败!")
    return  HttpResponse("success")

通过URL访问: http://127.0.0.1:8080/test/?telephone=18888688888&password=333333

打印结果如下:

erforming system checks...

System check identified no issues (0 silenced).
November 05, 2019 - 16:11:31
Django version 2.2.2, using settings ‘untitled1019.settings‘
Starting development server at http://127.0.0.1:8080/
Quit the server with CTRL-BREAK.
验证成功:zhiliao3

原文地址:https://www.cnblogs.com/harryTree/p/11799301.html

时间: 2024-10-10 10:13:22

django扩展用户一对一关联的相关文章

django 利用钉钉 扩展用户系统

django 利用钉钉 扩展用户系统 用户架构图 说明 以django 自带 user,group 为基础 ,结合 钉钉用户系统 进行结合,以达到能够满足实际需求. 组关系: 钉钉部门组 通过 多对多 关系到 系统Group. 然后设置计划任务,如果 有钉钉部门组 关联到了 系统组,就把该用户组下的 用户 自动添加相应的 系统组. 组关系2: 自定义权限组 通过 多对多 关系到 系统Group. 根据 用户 系统组 的名字 查询到 自定义权限信息,进行判断 版本 Django==2.0.9 js

18_django的用户模型和扩展django的用户模型

目录 User 模型 字段: User模型的基本用法 User 模型 User模型是这个框架的核心部分.他的完整的路径是在django.contrib.auth.models.User.以下对这个User模型做一个简单的了解: 字段: 内置的User模型拥有以下的字段: 1. username: 用户名.150个字符以内.可以包含数字和英文字符,以及_/@/+/.和-字符.不能为空,且必须唯一. 2. email: 邮箱. 可以为空. 3. password: 密码.经过哈希过后的密码. 4.

Django解决扩展用户表时,后台Admin显示密码为明文的问题

小生博客:http://xsboke.blog.51cto.com 如果有疑问,请点击此处,然后发表评论交流,作者会及时回复(也可以直接在当前文章评论). -------谢谢您的参考,如有疑问,欢迎交流 Django解决当扩展用户表时,用户继承AbstractUser后,后台Admin会显示密码为明文的问题 先看项目列表 1.今天在写一个扩展Django默认的用户表功能时,遇到了一个问题.先给大家看一下我写的,扩展用户表的models[apps.users.models],我是通过继承Abstr

ValueError: Related model 'myapp.ExUser' cannot be resolved django扩展User字段

扩展字段目前有两种方法: 扩展字段 新建一张表->然后与原有表创建一对一关系 继承django.contrib.auth.models下的AbstractUser类 ,重写User类 两种方式都是官方文档提到的,,实现方法可以在官网以及搜索引擎搜到各大佬的博客上,我今天只分享一下自己遇到的问题及解决方法 我采用的是第2种, 重写User的方法,但是在迁移数据库的时候,遇到问题, 编写好其它表之后,发现User表中字段需要添加于是在models.py 文件中添加了 ExUser类 from dja

Django之用户认证auth模块使用

Auth认证模块 执行数据库迁移的那两条命令时,即使我们没有建表,django是不是也会创建好多张表?我们创建之后去看一下里面的一个叫auth_user表,既然是表,那肯定应该有对应的操作改表的方法 auth_user表记录的添加 创建超级用户(不可手动插入,因为密码是加密的) 简单使用auth认证 from django.contrib import auth def login(request): if request.method == 'POST': name = request.POS

Django 重写用户模型

目录 Django 重写用户模型 修改配置文件,覆盖默认的User模型 引用User模型 指定自定义的用户模型 Django 期望你自定义的 User model 满足一些最低要求: 下面为一些AbstractBaseUser的子类必须定义的关键的字段和方法: 下面为一些AbstractBaseUser的子类可以使用的方法: 为你的User模型自定义一个管理器 扩展Django默认的User 自定义用户与内置身份验证表单 自定义用户和django.contrib.admin 自定义用户和权限 如

Window上python开发--4.Django的用户登录模块User

在搭建网站和web的应用程序时,用户的登录和管理是几乎是每个网站都必备的.今天主要从一个实例了解以下django本身自带的user模块.本文并不对user进行扩展. 主要使用原生的模块. 1.User模块基础: 在使用user 之前先import到自己的iew中.相当与我们自己写好的models.只不过这个是系统提供的models. from django.contrib.auth.models import User # 导入user模块 1.1User对象属性 User 对象属性:usern

扩展用户

使用外部用户系统的配置 安装openfire,启动服务控制台,进入管理界面.首次进入管理,会自动进入配置界面,配置很简单.注意一点,在选择数据库时,使用"外部数据库",openfire支持常用的数据库,包括mysql.oracle.mssql等.我使用的是mysql,这样openfire就会自动在指定的mysql数据库上建表,并写入初始数据. openfire自带有一套用户系统,实现了用户登录验证功能,同时还允许通过配置,使用JDBC访问指定的数据库,这样就可以通过配置访问外部的用户系

一对一关联

一对一关联 版本 功能调整 5.0.5 增加关联自动写入和删除 5.0.4 增加关联属性绑定到父模型功能 定义 定义一对一关联,例如,一个用户都有一个个人资料,我们定义User模型如下: namespace app\index\model; use think\Model; class User extends Model { public function profile() { return $this->hasOne('Profile'); } } hasOne方法的参数包括: hasOn