首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何检查列表中的某个帖子是否被当前用户投票

在 Django 项目中,如果需要检查一个列表中的某个帖子是否被当前用户投票(比如点赞或踩),可以通过数据库查询实现。...以下是具体的实现方法,假设你使用的是 Django 并有如下的数据库模型结构:问题背景我正在创建一个reddit克隆,其中存在一个问题,我正在寻找一种方法来指示当前用户是否对某个特定问题进行过投票,而不会产生过多数据库请求...,用来检查用户是否对某个节点进行过投票。...downvoted_by(self, user): return self.down_votes.filter(user=user).exists()然后,在视图中,我们可以使用这些方法来检查用户是否对某个帖子进行过投票...down="{%if node.pk in downvoted_comments %}{% endif %}"​ ...​通过上述方法,可以高效地检查列表中每个帖子是否被当前用户投票

4300

Angular的12个经典问题,看看你能答对几个?(文末附带Angular测试)

Angular作为目前最为流行的前端框架,受到了前端开发者的普遍欢迎。...组件特定hooks: ngAfterContentInit:组件内容已初始化完成 ngAfterContentChecked:在Angular检查投影到其视图中的绑定的外部内容之后。...这通常用在setter中,当类中的值被更改完成时。 可以通过模块的任何一个组件,使用订阅方法来实现事件发射的订阅。...Codelyzer是一个开源工具,用于运行和检查是否遵循了预定义的编码准则。Codelyzer仅对Angular和TypeScript项目进行静态代码分析。...如果服务器的HTTP请求结果或其它一些异步操作不再需要,则Observable的订阅者可以取消订阅,而Promise将最终调用成功或失败的回调,即使你不需要通知或其提供的结果。

17.4K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    进阶 | 重新认识Angular

    Angular 核心:使用脏检测(新/旧值比较)Diff 当Model发生变化,会检测所有视图是否绑定了相关数据,再更改视图 Zone.js(猴子补丁:运行时动态替换) 将Javascript中异步任务包裹一层...,使其运行在Zone上下文中 每一个异步任务为一个Task,提供钩子函数(hook) Angular2+变化 zone.js对异步任务进行跟踪 脏检查计算放进worker Angular2+中树结构,自上而下进行脏检查...依赖注入 Angular的依赖注入可谓是灵魂了,之前有篇详细讲这个的文章《谈谈Angular2中的依赖注入》。...Rx不是允诺,它本质上还是由订阅/发布模式引出来的,它的核心思想就是数据响应式,源头是数据产生者,经过一系列的变换/过滤/合并的操作,被数据消费者所使用,数据消费者何时响应,完全取决于数据流何时能流下来...Rx的数据是否流出不取决于是否subscribe,也就是说一个observable在未被订阅的时候也可以流出数据,在之后它被订阅过后,先前的数据是无法被数据消费者所查知,所以Rx还引入了一个lazy模式

    2.6K10

    Angular Elements 及其工作原理

    Angular Elements 提供一种更简洁、对开发者更友善、更快乐地开发动态组件的方式 —— 在幕后它基于同样的机制(指创建动态组件),但隐藏了许多样板代码。...要完成这座桥,让我们来依次实现 Custom Elements API 中所要求的每个方法,并在这个方法中编写关于绑定 Angular 的代码: | callback...this.componentRef = this.componentFactory.create(componentInjector, null, element); // 然后我们要检查是否需要初始化组件的...文章中所涉及的所有实现逻辑在 Angular Elements 都已被抽象化,使用这个库可以使我们的代码更优雅,可读性和维护性也更好,同时也更易于扩展。...同时它还会在 input 改变时触发脏检查。这个运作过程在上文的例子中也有被提及。 下次我们将阐述 Angular Elements 通过 Custom Events 输出事件。

    2.4K20

    vue响应式原理(数据双向绑定的原理)

    DOM的原生方法去更新视图,这样就完成了数据改变到视图更新的一个自动过程 实现数据双向绑定的方法: 发布者-订阅者模式(backbone.js) 思路:使用自定义的data属性,在HTML代码中指明绑定...所有绑定起来的javascript对象以及DOM元素都将订阅一个发布者对象。...任何时候如果javascript对象或者一个HTML输入字段被侦测到发生变化,将代理事件变成发布者-订阅者模式,这会反过来变化广播,并传播到所有绑定的javascript对象以及DOM元素上。...脏值检查(angular.js) angular.js是通过脏值检测的方式,对比数据是否有变更,从而决定是否更新视图。最简单的方式就是通过setInterval()定时轮询检测数据变动。...然后,需要compile解析模板指令,将模板中的变量替换成数据,接着初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者。

    2.7K40

    vue双向数据绑定原理

    实现数据绑定的做法有大致如下几种: 发布者-订阅者模式(backbone.js) 脏值检查(angular.js) 数据劫持(vue.js) 发布者-订阅者模式: 一般通过sub, pub...= value 这种方式更新数据,同时自动更新视图,于是有了下面两种方式 脏值检查: angular.js 是通过脏值检测的方式比对数据是否有变更,来决定是否更新视图,最简单的方式就是通过 setInterval...订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。...思路整理 实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者 实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据...,以及绑定相应的更新函数 实现一个Watcher,作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图 入口函数,整合以上三者 流程图

    2.2K20

    Vue.js快速入门

    作为前端的三大框架之一(其他两个是Angular、React),Vue得到了大多前端开发者的青睐,最新版本为2.4.4 。...对模块友好:可以通过 NPM、Bower 或 Duo 安装,不强迫你所有的代码都遵循 Angular 的各种规定,使用场景更加灵活。...这里可以见到的介绍下MVVM框架: Observer 数据监听器,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者,内部采用Object.defineProperty的getter和setter...当数据发生变化时,Observer 中的 setter 方法被触发,setter 会立即调用Dep.notify(),Dep 开始遍历所有的订阅者,并调用订阅者的 update 方法,订阅者收到通知后对视图进行相应的更新...安装命令如下: cnpm install -g vue-cli 安装完后,检查是否安装成功,输入vue(或者使用vue -v查看版本信息),出现相关的帮助信息则说明安装成功。

    2.2K90

    Vue.js简介

    作为前端的三大框架之一(其他两个是Angular、React),Vue得到了大多前端开发者的青睐,最新版本为2.4.4 。...对模块友好:可以通过 NPM、Bower 或 Duo 安装,不强迫你所有的代码都遵循 Angular 的各种规定,使用场景更加灵活。...这里可以见到的介绍下MVVM框架: Observer 数据监听器,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者,内部采用Object.defineProperty的getter和setter...当数据发生变化时,Observer 中的 setter 方法被触发,setter 会立即调用Dep.notify(),Dep 开始遍历所有的订阅者,并调用订阅者的 update 方法,订阅者收到通知后对视图进行相应的更新...安装命令如下: cnpm install -g vue-cli 安装完后,检查是否安装成功,输入vue(或者使用vue -v查看版本信息),出现相关的帮助信息则说明安装成功。

    5.6K70

    AngularDart 4.0 高级-管道 顶

    在前面的例子中,你没有列出DatePipe,因为所有的Angular内置管道都是预先注册的。 要在实例中查看行为(查看源代码),请更改模板中的值和可选的指数。...注意如何添加一个英雄: heroes.add(hero); 您将英雄添加到英雄列表中。 对列表的引用没有改变。 这是同一个列表。 这都是Angular关心的。...纯净的管道 仅当Angular检测到对输入值的纯粹更改时才执行纯管道。 在AngularDart中,纯粹的改变仅仅来自对象引用的改变(假设所有东西都是Dart中的对象)。...对象引用检查的速度比深入检查差异要快得多 - 所以Angular可以快速确定它是否可以跳过管道执行和视图更新。 出于这个原因,如果您可以接受变更检测策略,则最好使用纯净的管道。...]; } 异步管道将样板文件保存在组件代码中。 该组件不必订阅异步数据源,提取已解析的值并将其公开以进行绑定,并且必须在其销毁时取消订阅(内存泄漏的有效来源)。

    6.4K20

    深度解析 Vue MVVM 原理实现

    Vue 与 MVVM 其实,Vue 框架就是一个典型的 MVVM 模型的框架。 Vue 框架其实就是起到 MVVM 模式中的 ViewModel 层的作用。...实现数据绑定的做法有大致如下几种: 脏值检查(angular.js) 数据劫持(vue.js) 发布者-订阅者模式(backbone.js) 这里大致说下脏值检查: angular.js 是通过脏值检测的方式比对数据是否有变更...,来决定是否更新视图,最简单的方式就是通过 setInterval() 定时轮询检测数据变动,angular只有在指定的事件触发时进入脏值检测,大致如下: DOM事件,譬如用户输入文本,点击按钮等。...,就必须要实现以下几点: 1.实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者 2.实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析...,根据指令模板替换数据,以及绑定相应的更新函数 3.实现一个Watcher,作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图 4

    1.5K20

    一个Angular 5教程:一步一步指导实现你的第一个Angular 5应用程序

    它还监视项目源中的每个更改并重新编译所有更改,之后它会要求浏览器重新加载打开的页面。因此,通过使用Angular CLI,我们已经在开发环境中工作,无需编写配置或实际执行任何操作。...现在我们已经看到了我们自动生成的Angular应用程序的所有部分,这些部分实际发生在浏览器中显示的页面中。...我们需要导入ngModel到我们的AppModule。但从哪里?如果我们检查文档,我们可以看到它在Angular Forms模块中。...我们是否需要完成所有这些样板代码?其实,我们可以欺骗并使用takeWhile运算符。...注意/en/URL中的内容。 综述 祝贺您完成本教程。您现在可以加入其他Angular开发人员的行列。

    42.7K10

    剖析Vue原理&实现双向绑定MVVM

    实现数据绑定的做法有大致如下几种: 发布者-订阅者模式(backbone.js) 脏值检查(angular.js) 数据劫持(vue.js) 发布者-订阅者模式: 一般通过sub, pub的方式实现数据和视图的绑定监听...这种方式现在毕竟太low了,我们更希望通过 vm.property = value这种方式更新数据,同时自动更新视图,于是有了下面两种方式 脏值检查: angular.js 是通过脏值检测的方式比对数据是否有变更...,来决定是否更新视图,最简单的方式就是通过 setInterval() 定时轮询检测数据变动,当然Google不会这么low,angular只有在指定的事件触发时进入脏值检测,大致如下: DOM事件,譬如用户输入文本...没错,上面的思路整理中我们已经明确订阅者应该是Watcher, 而且var dep = new Dep();是在defineReactive方法内部定义的,所以想通过dep添加订阅者,就必须要在闭包内操作...监听数据、绑定更新函数的处理是在compileUtil.bind()这个方法中,通过new Watcher()添加回调来接收数据变化的通知 至此,一个简单的Compile就完成了。

    3.1K70

    【响应式编程的思维艺术】 (5)Angular中Rxjs的应用示例

    开发中Rxjs几乎默认是和Angular技术栈绑定在一起的,笔者最近正在使用ionic3进行开发,本篇将对基本使用方法进行演示。...冷热Observable 冷Observable从被订阅时就发出整个值序列 热Observable无论是否被订阅都会发出值,机制类似于javascript事件。...Angular应用中的Http请求 Angular应用中基本HTTP请求的方式: import { Injectable } from '@angular/core'; import { Observable...4.1 shareReplay与请求缓存 开发中常会遇到这样一种场景,某些集合型的常量,完全是可以复用的,通常开发者会将其进行缓存至某个全局单例中,接着在优化阶段,通过增加一个if判断在请求之前先检查缓存再决定是否需要请求...,网络请求被发出并进行了缓存,之后再有其他订阅者加入时,就会得到之前缓存的数据,运算符的名称已经很清晰了,【share-共享】,【replay-重播】,是不是形象又好记。

    6.7K20

    VUE2.0如何追踪数据变化?

    Angular 1 中,采用脏检查机制,缺点是:当watcher越来越多时,作用域内每一次变化,所有watcher都要重新计算。...这样可以拦截数据,做一些额外的事情。比如设置/更新时,添加对该属性感兴趣的订阅者;读取属性时,通知关系该属性的订阅者更新数据。 2....),它劫持属性变化,并负责 添加订阅者(watcher)到订阅者容器(Dependency) 数据改变时,通知订阅者容器发布更新通知。...数据对象的每个属性,都包含一个Dep实例对象,用于存储关心该属性变化的watchers。 在model--->UI渲染过程中,通过数据属性的get函数,可以添加相对应的watcher到Dep对象中。...当触发UI更新操作(比如,input框输入某些内容),即UI--->Model--->UI这个过程中,首先触发对应数据属性的set函数,然后订阅者容器Dep对象发布消息通知notify,随后,所有订阅者

    1.2K20

    AngularDart 4.0 高级-生命周期钩子 顶

    组件有一个由Angular自己管理的生命周期。 Angular创建它,渲染它,创建和渲染它的子项,在数据绑定属性发生变化时对其进行检查,并在将它从DOM中删除之前对其进行销毁。...本章的其余部分将进一步详细讨论选定的练习 Peek-a-boo:所有钩子 PeekABooComponent演示了一个组件中的所有钩子。 如果有的话,你很少会实现像这样的所有接口。...添加一个英雄会产生一个新的英雄。 间谍的ngOnInit记录该事件。 重置按钮清除英雄列表。 Angular从DOM中移除所有英雄元素并同时销毁他们的间谍指令。...取消订阅observables和DOM事件。 停止间隔定时器。 取消注册此指令在全局或应用服务中注册的所有回调。 如果你忽视这样做,你会冒内存泄漏的风险。...回想一下,在调用AfterView钩子之前,Angular调用了AfterContent的两个钩子。 在完成该组件的视图之前,Angular会完成投影内容的组合。

    6.2K10

    【EventBus】EventBus 源码解析 ( 取消订阅 )

    取消订阅是以对象为单位的 , 一旦调用了 EventBus 的 unregister 方法 , 并传入 订阅者对象 , 则该订阅者对象中的所有 订阅方法 , 都会被 取消订阅 ; 在 【EventBus...>, CopyOnWriteArrayList> subscriptionsByEventType 集合中查找参数类型对应的 订阅者类 对应的订阅者方法 , 从上述集合中移除相应的...订阅者类及相关的订阅方法 , 即可完成 取消订阅的操作 ; public class EventBus { /** 从所有事件类中注销给定订阅服务器。...列表中 订阅者对像 是否是 取消注册的对象 , 如果是 , 直接将相应的 Subscription 对象从列表中移除 ; /** 仅按事件类型更新订阅,不按订阅类型更新订阅!...Subscription 列表中 订阅者对像 是否是 取消注册的对象 // 如果是 , 直接将相应的 Subscription 对象从列表中移除

    51410

    前端面试题angular_Vue前端面试题

    AngularJS在scope变量中使用脏值检查来实现了数据双向绑定,并且可以通过scope.watch来监听变化触发回调; angular中使用的是脏检查机制,在angular中每次你绑定一些东西到你的...当浏览器接受到可以被angular context处理的事件时就会触发digest循环,这个循环是由两个更小的循环组合起来的,一个是watch列表,一个是evalAsync列表,而watch列表在digest...循环中被“脏值检查”解析,在digest将会遍历我们的watch,然后询问它是否有属性和值的变化,直到watch队列都检查过,在检查数据变化的时候,由于并不知道这个事件是对哪些数据进行了更改,以及这个事件有可能造成事件之外的其他任何地方的数据更改...,所以必须进行一次大检查,将所有“注册”过的值全部检查一遍,一次检查称为一个周期,每次最少检查两遍,因为第二遍用来确认,前一遍的变动中是否有数据的变动,导致了其他数据的变动,如果第二次有变动的话,会再执行一遍...在复杂的应用中,也可以为实体建立对应的构造函数,比如硬盘(Disk)模块,可能有列表、新建、详情这样几个视图,并分别对应的有 controller,那么可以建一个 Disk 构造函数,里面完成数据的增删改查和验证操作

    14.1K20
    领券