django 中的竞争条件

2024-03-11

下面是一个带有潜在竞争条件的 django 视图的简单示例:

# myapp/views.py
from django.contrib.auth.models import User
from my_libs import calculate_points

def add_points(request):
    user = request.user
    user.points += calculate_points(user)
    user.save()

竞争条件应该相当明显:用户可以发出此请求两次,并且应用程序可能会执行user = request.user同时,导致一个请求覆盖另一个请求。

假设函数calculate_points比较复杂,并且基于各种奇怪的东西进行计算,不能放在一个单一的东西中update并且很难放入存储过程中。

所以这是我的问题:django 可以使用什么样的锁定机制来处理类似的情况?


Django 1.4+ 支持选择更新 https://docs.djangoproject.com/en/stable/ref/models/querysets/#django.db.models.query.QuerySet.select_for_update,在早期版本中,您可以执行原始 SQL 查询,例如select ... for update根据底层数据库的不同,该行将锁定该行以防止任何更新,您可以对该行执行任何操作,直到事务结束。例如

from django.db import transaction

@transaction.commit_manually()
def add_points(request):
    user = User.objects.select_for_update().get(id=request.user.id)
    # you can go back at this point if something is not right 
    if user.points > 1000:
        # too many points
        return
    user.points += calculate_points(user)
    user.save()
    transaction.commit()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django 中的竞争条件 的相关文章

  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • 如何让 Django 和 ReactJS 协同工作?

    New to Django and even newer to ReactJS I have been looking into AngularJS and ReactJS but decided on ReactJS It seemed
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 如何跨多个表强制执行 CHECK 约束

    我有一个在 Microsoft SQL Server 2012 Express 中记录奶牛繁殖信息的数据库 显然 一头牛只有在出生后才能配种 并且在其一生中可能会配种多次 我需要在我的数据库中强制执行这些约束 我目前已经根据下图安排了一个架
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 爬行 Android 文件系统陷入可能的 SymLink 循环

    我正在尝试在没有 NIO 的情况下抓取 Android 设备的整个文件系统 包括目录和文件 来构建它的树 如果我有 NIO 那么我可以使用 WalkTree 或类似的 但我没有 我遇到的问题 在 Nexus 5 API 23 x86 模拟器
  • Symfony 2.8:从 2.7.7 更新到 2.8.0 后 isScopeActive 弃用

    我已经从 2 7 7 更新到 symfony 2 8 并且我得到了这个弃用 Symfony Component DependencyInjection Container isScopeActive 方法自 2 8 版本起已弃用 并将在 3
  • 在 F# 中重放记录的数据流

    我已将实时股票报价记录在 SQL 数据库中 其中包含字段Id Last and TimeStamp 最后是当前股价 双倍 以及TimeStamp is the DateTime记录价格变化的时间 我想以与传入相同的方式重播此流 这意味着如果
  • 为 Django 模型生成非序列 ID/PK

    我即将开始开发新的网络应用程序 其中一部分将为用户提供可以以一对多关系进行自定义的页面 这些页面自然需要有唯一的 URL 留给自己的设备 Django 通常会分配一个标准AUTOINCREMENT模型的 ID 虽然这效果非常好 但看起来不太
  • 从整数流创建平衡二叉搜索树

    我刚刚结束了一次工作面试 我一直在纠结这个问题 在我看来 在 15 分钟的面试中这是一个很难回答的问题 问题是 编写一个函数 给定整数流 无序 构建平衡搜索树 现在 您不能等待输入结束 它是一个流 因此您需要动态平衡树 我的第一个答案是使用
  • 城市和经纬度距离

    我有一张桌子 城市 纬度 经度 我需要一个 sql 查询来了解所有城市距离纽约 100 英里 这是我们的 您可能需要根据您的表结构修改它 我们查找零售地点 和便利设施 而不是城市 但困难的部分是本声明中起作用的 距离最近 CREATE PR
  • python2.5 virtualenv 中的 MySQLdb

    我有一个带有 MySQL 服务器的 Fedora 11 机器 Fedora 11 内部使用 python 2 6 并且 python 2 6 会自动安装在盒子上 我已经为 2 5 5 版本创建了一个 python virtual env 以
  • MySQL max_allowed_pa​​cket 重置

    由于某些超出我所知的原因 我几乎每天都必须重置 max allowed pa cket 有时甚至一天多次 SET GLOBAL max allowed packet 1073741824 我已经沿着这些思路搜索了 MySql bug 的报告
  • CSS 将边框应用于云形状?

    我通过 CSS3 使用不同的方式画了一朵云div我正在尝试为整个形状添加边框 但我遇到了麻烦 因为每个形状都有自己的边框 如何将边框应用于整个云 HTML div div div div div div div div CSS margin
  • Vim 复制行号?

    我通过 SSH 连接使用 vim 我已经设置了数字设置 因此当我尝试用鼠标复制代码部分时 它也会抓取数字 有没有一种复制文本而不抓取数字的好方法 我知道在那个 vim 实例中我可以使用 Y 但我需要一种复制到其他实例和程序的方法 这是我正在
  • OSGI 嵌套依赖 jar

    如果我有一个 OSGI Bundle 其中包含嵌套在 OSGI Bundle jar 中的依赖项 jar 我是否需要在 Import Package 清单中列出这些类以便我可以使用它们 我认为不会 另外 如何将这些依赖项 jar 添加到我的
  • 通过 JDBC 瘦驱动程序连接 Oracle 11g 时出现问题 (Domino Java)

    我无法使用以下代码远程连接 Oracle 11 数据库 但是 如果我尝试连接安装在我的计算机上的 Oracle 9 数据库 相同的代码可以正常工作 缺什么 我没有收到任何错误 Lotus Notes 挂起 import lotus domi
  • 如何使用C++获取文件夹/目录名称,而不是一个文件的路径?特别是 boost::filesystem; [复制]

    这个问题在这里已经有答案了 std string file C folder1 folder2 folder3 txt fs path file path file fs path file dir file path parent pat
  • 成员初始值设定项列表是构造函数的声明或定义的一部分吗?

    请解释如何使用成员初始值设定项列表 我有一个类声明在 h文件和一个 cpp像这样的文件 class Example private int m top const int m size public Example int size int
  • 提高 SQL Server 对大型表的查询性能

    我有一个相对较大的表 当前有 200 万条记录 想知道是否可以提高即席查询的性能 这个单词ad hoc在这里是关键 添加索引不是一个选项 最常查询的列上已经有索引 运行一个简单的查询以返回 100 条最近更新的记录 select top 1
  • 了解 do-while 循环

    我正在做 Oracle 认证助理 Java SE7 程序员练习考试 书本 并遇到一个问题 即使有解释我也不明白答案 这是解释和代码 它将打印 3 循环体执行两次 程序将打印 3 我不明白循环体是如何执行两次的 也许我不明白什么是b b方法
  • JsonPath 与 Newtonsoft.JSON

    我尝试了近一个小时的不同方法 但我不明白 我的 JSON 对象是这样的 typeOfHair value code Dry Hair values value DryHair language en value TrockenesHaar
  • 为什么过滤未排序的列表比过滤排序的列表更快

    我一直在玩 Java 8Streams API我决定进行微基准测试stream and parallelStream 溪流 正如预期的那样parallelStream 速度是原来的两倍 但是会出现其他问题 如果我在将数据传递到之前对数据进行
  • 不使用
    标签是否可以实现类似
    的效果?

    我个人喜欢 fieldset http www w3 org wiki HTML Elements fieldset标签 因为它如何绘制一个盒子并放置 legend http www w3 org wiki HTML Elements le
  • django 中的竞争条件

    下面是一个带有潜在竞争条件的 django 视图的简单示例 myapp views py from django contrib auth models import User from my libs import calculate p