Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Django源码学习-4-Signals 信号量

Django源码学习-4-Signals 信号量

作者头像
小团子
发布于 2019-07-30 05:11:39
发布于 2019-07-30 05:11:39
1.1K00
代码可运行
举报
文章被收录于专栏:数据云团数据云团
运行总次数:0
代码可运行

Django源码学习-3-Model-下

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

在完成前三小节对 models 的认识,会发现在掌握了 models 的 api 基础用法,创建模型、迁移数据库、生成数据表、对数据进行增删改查。这些都是需要不断加强练习的知识点,尤其需要注意的是 ORM 的关系映射,一对一、一对多和多对多的关系。这些知识点的运用需要结合不同的业务场景对数据库进行 ORM 设计,即操作对象的属性和方法。

信号量是 Django 的一个核心知识点,在项目中很少有使用到,所以很多人都不了解或者没听过。简单来说就是在进行一些对数据操作的前后可以发出一个信号来获得特定的操作,这些操作包括

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
django.db.models.signals.pre_save
django.db.models.signals.post_save

在模型 save()方法调用之前或之后发送。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
django.db.models.signals.pre_delete
django.db.models.signals.post_delete

在模型 delete()方法或查询集的delete() 方法调用之前或之后发送。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

django.db.models.signals.m2m_changed
模型上的 ManyToManyField 修改时发送。

django.core.signals.request_started
django.core.signals.request_finished

Django开始或完成HTTP请求时发送。

在自定义用户模型类的时候,在后台添加用户数据因为使用了自定义模型类的create,所以密码会以明文保存,接下来使用信号量方式在保存后马上修改密码解决。

users/signals.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth import get_user_model
from utils.create_time_str import CreateIdView

User = get_user_model()
id_time_str = CreateIdView()

@receiver(post_save, sender=User)
def create_user(sender, instance=None, created=False, **kwargs):
    """
    sender:模型类。
    instance:保存的实际实例。
    created:如果创建了新记录True。
    update_fields:Model.save()要更新的字段集,如果没有传递则为None
    """
    if created:
        password = instance.password
        instance.set_password(password)
        instance.open_id = id_time_str.create_time_stamp()
        instance.save()

users/apps.py

使用ready加载,否则不生效

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.apps import AppConfig

class UsersConfig(AppConfig):
    name = 'users'
    verbose_name = "用户管理"

    def ready(self):
        import users.signals

进入 signals 源码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db.models import signals
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Django信号量signals总结使用
Django信号量 #0 GitHub https://github.com/Coxhuang/django-signals.git #1 环境 python3.6 django==2.0.7 #2 需求 老板要求,每次数据库迁移时,变量a自增 老板要求,每次数据库D有新的数据添加进去时,变量b自增 … … #3 设置 #3.1 新建一个django项目 #3.2 配置文件 #3.2.1 目录结构 . ├── app │ ├── __init__.py │ ├── admin.py │ ├──
Autooooooo
2020/11/09
1K0
Django信号量signals总结使用
Django REST framework+Vue 打造生鲜超市(六) 七、用户登录与手机注册
七、用户登录与手机注册 7.1.drf的token (1)INSTALL_APP中添加 INSTALLED_APPS = ( ... 'rest_framework.authtoken
zhang_derek
2018/04/16
6.2K2
Django REST framework+Vue 打造生鲜超市(六)
		七、用户登录与手机注册
使用信号监控 Django 模型对象字段值的变化
Django 信号 (Signals) 的功能类似于 WordPress 的动作 (action),用于为项目全局增加事件的广播 (dispatch) 与接收 (receive) 机制。其中,灵活使用其内置的模型信号 (Model Signals) 的接收功能就可以监控大部分模型对象 (Model instances) 的变化。因为不需要修改模型本身的代码,在进行跨应用 (App) 监控时有低耦合的优势。
BigYoung小站
2020/05/05
2.6K0
Django的信号机制详解
Django提供一种信号机制。其实就是观察者模式,又叫发布-订阅(Publish/Subscribe) 。当发生一些动作的时候,发出信号,然后监听了这个信号的函数就会执行。
KEVINGUO_CN
2020/03/17
9660
Django实战-Signals 信号量
Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2019/10/18
8200
利用Django和hAdmin快速开发管理系统(三)
IT不难
2023/11/17
1930
利用Django和hAdmin快速开发管理系统(三)
(项目)生鲜超市(六)
  然后迁移数据库,会生成一张表authtoken_token,存放用户的token信息:
py3study
2020/01/20
1.9K0
Django中的信号
Django中内置的signal Django中提供了"信号调度",用于在框架执行操作时解耦. 一些动作发生的时候,系统会根据信号定义的函数执行相应的操作 Model_signals pre_init # Django中的model对象执行其构造方法前,自动触发 post_init # Django中的model对象执行其构造方法后,自动触发 pre_save # Djan
用户1214487
2018/01/24
1.8K0
Django中的信号
Django的信号
Django提供一种信号机制。其实就是观察者模式,又叫发布-订阅(Publish/Subscribe) 。当发生一些动作的时候,发出信号,然后监听了这个信号的函数就会执行。
菲宇
2019/06/13
9600
Django REST Framework-常用的信号类型(二)
pre_save信号在对象保存前触发,post_save信号在对象保存后触发。它们可以用于执行一些自定义的逻辑,如修改对象属性、发送邮件通知等。下面是一个pre_save信号和post_save信号的示例:
玖叁叁
2023/04/26
5840
Django REST framework+Vue 打造生鲜超市(十二) 十三、首页、商品数量、缓存和限速功能开发
十三、首页、商品数量、缓存和限速功能开发  13.1.轮播图接口实现 首先把pycharm环境改成本地的,vue中local_host也改成本地  (1)goods/serializer class BannerSerializer(serializers.ModelSerializer): ''' 轮播图 ''' class Meta: model = Banner fields = "__all__" (2)goods/views.py c
zhang_derek
2018/04/23
2K0
Django REST framework+Vue 打造生鲜超市(十二)
		十三、首页、商品数量、缓存和限速功能开发
Python Django个人网站搭建10-扩展用户信息
作者: zifanwang  发布于2020-05-16
zifan
2021/12/14
6230
Python Django个人网站搭建10-扩展用户信息
Django+Vue开发生鲜电商平台之7.用户登录和注册功能
Github和Gitee代码同步更新: https://github.com/PythonWebProject/Django_Fresh_Ecommerce; https://gitee.com/Python_Web_Project/Django_Fresh_Ecommerce。
cutercorley
2020/07/30
4.8K0
Django+Vue开发生鲜电商平台之7.用户登录和注册功能
基于 Django 信号机制实现类似触发器的效果
我们都知道,在关系数据库中,为了保证数据完整性,我们都会使用一个叫做触发器的玩意。今天我就基于Django信号机制实现类似触发器的效果,在此之前我先简单介绍一下触发器。
不可言诉的深渊
2020/03/26
2.7K0
django 自带 user 字段扩展及头像上传
博客:https://www.jianshu.com/p/b74107b6464d
陈宇明
2020/12/15
2.5K0
django 自带 user 字段扩展及头像上传
django 关于User模型
User模型是这个框架的核心部分。他的完整的路径是在django.contrib.auth.models.User。以下对这个User对象做一个简单了解:
用户2200417
2022/05/24
1.3K0
Django REST Framework-信号示例
上面的代码定义了一个名为do_something的函数,并将其注册为user_logged_in信号处理器。当用户成功登录时,do_something函数将被调用。我们可以在do_something函数中执行任何自定义的代码,如记录用户登录日志、更新用户信息等。
玖叁叁
2023/04/26
4730
Django外键模型未保存引用
在 Django 中使用外键关系时,如果遇到模型未保存引用的问题,通常是因为在创建或更新相关对象时,有关联对象未被正确保存或引用。这里提供一些常见的问题和解决方案来确保你的外键关系正确处理。
华科云商小徐
2025/01/06
5600
Django User模型扩展
通常情况下,Django提供的User模型能够满足我们大部分的需求,但是有时候我们需要给User添加一些格外的功能和信息。
用户2936342
2018/08/27
6010
31.Django缓存和信号
缓存  由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回 Django中提供了6种缓存方式: 开发调试 内存 文件 数据库 Memcache缓存(python-memcached模块、pylibmc模块) 1.配置 # 此为开始调试用,实际内部不做任何操
zhang_derek
2018/04/11
9850
相关推荐
Django信号量signals总结使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验