但是在Web中,由于浏览器的限制,实现即时通讯需要借助一些方法。这种限制出现的主要原因是,一般的Web通信都是浏览器先发送请求到服务器,服务器再进行响应完成数据的现实更新。...它们大体可以分为两类,一种是在HTTP基础上实现的,包括短轮询、comet和SSE;另一种不是在HTTP基础上实现是,即WebSocket。下面分别介绍一下这四种轮询方式,以及它们各自的优缺点。...当我们要实现一个实时投票系统,或者是实时通讯系统,我们的页面数据总需要更新 我们不能让用户一直去刷新页面。...(“/vote”, methods=[“POST”]) def vote(): # 投票 循环q对象的dict 给每个q对象返回值 uid = request.json.get(“uid”) USERS...=[“POST”, “GET”]) def get_vote(): # 获取投票结果 去自己的q对象里取值 没有夯住 知道有或者超时返回 user_uuid = session.get(“user_uuid
在 Django 项目中,如果需要检查一个列表中的某个帖子是否被当前用户投票(比如点赞或踩),可以通过数据库查询实现。...以下是具体的实现方法,假设你使用的是 Django 并有如下的数据库模型结构:问题背景我正在创建一个reddit克隆,其中存在一个问题,我正在寻找一种方法来指示当前用户是否对某个特定问题进行过投票,而不会产生过多数据库请求...我的模型如下:class Thread(models.Model): title = models.CharField(max_length=200) text = models.TextField...,我们需要在模型中添加两个方法,用来检查用户是否对某个节点进行过投票。...(self, user): return self.down_votes.filter(user=user).exists()然后,在视图中,我们可以使用这些方法来检查用户是否对某个帖子进行过投票
Django的models模型很类似,定义了我们的数据表的结构, 只不过是通过sqlalchemy实现的。...继续将以下代码添加到pollsapi/schemas.py class Config: SQLAlchemy 中的定义参数类型与 Pydantic 不同,在 SQLAlchemy 使用的是大写String...question_text: str Pyndatic 模型/模组将映射到传入数据(POST、PUT 中的请求数据)和从 API 返回的响应数据。...另一个重要的事情要了解的是我们在Question类里设置了orm_mode = True,这是因为默认Pydantic模型可以读取dict类型数据,不能直接读取ORM类型数据。...如果数据是ORM模型,需要进行此项设置。 好的,我们现在将创建包含执行CRUD操作的所有功能。
RESTful API 设计 一般的 Web 开发都是使用 RESTful 风格进行API的开发,这种 RESTful 风格的 API 开发的一般流程是: 需求分析 模型设计 编码实现 路由设计.../v1/api/vote/{vote_id} # 创建投票 POST /v1/api/vote # 更新投票 PATCH /v1/api/vote/{vote_id} # 删除投票 DELETE...对于后端开发人员而言,重要的是在满足需求的前提下设计这类 API。...设计这类 API 一般需要处理这些具体的问题: 根据需求进行模型设计:即 model 层,模型设计核心对应数据库表,所以又需要根据需求,设计字段、字段类型、表的多对多等关系 抽象出资源实体,进行资源的增删改查操作...是否不包含该字段、@deprecate 是否废弃该字段 内联片段:接口类型或者联合类型中获取下层字段 元字段 类型定义、对象定义 内置的类型:ID、Int、Float、String、Boolean,
# div.find_all("li") # 查找里边的li标签 # 唯一的时候用find,多个使用find_all # print(url.rsplit("/",maxsplit=1)) # rsplit...obj=B() obj.fun() 通过此方式实现调用方法报错,注意只有在(调用)的时候才会报错 """ # =============================================...直接写function()对于新的ajax添加的组件可能时间失效 绑定时间的时候使用委托式 on的方式 长轮询实现方式:队列 也可以使用webocket实现,但是兼容性不好 from flask import...get/vote',methods=['GET']) def get_vote(): user_uuid = session['current_user_uuid'] q = QUEQUE_DICT...} ---> \r\n\r\n1=a&2=b contentType 就是默认的类型 使用post可获得数据 # data=json.dumps({1:"a",2,"b"}) --->\r\n\r\n
之所以需要 react-dom 是因为它可以在 DOM (Document Object Model,文档对象模型)环境中渲染使用 React 框架定义的组件,听起来令人摸不着头脑,简单来说这就是浏览器所做的工作...你应该还记得,投票函数 vote()接收两个参数,帖子序号 post id 和投票类型 Ballot,具体而言就是没有投票 NONE,好评 UPVOTE 或差评 DOWNVOTE,它的存储格式为 8 位无符号整型...我们需要分别在好评投票按钮和差评投票按钮上添加点击处理程序,然后再将我们在投票类型 BALLOT 中定义的好评投票和差评投票传递给它们(请注意,投票类型中的没有投票 None 只是为了保证程序逻辑的完整性...e => this.vote(BALLOT.DOWNVOTE)}>Downvote 接下来,我们需要将该投票类型以及所投的帖子序号 post id 发送到智能合约之中。...同时,我们还需要考虑到,如果用户已经对一个帖子进行了投票,只是这笔包含投票的交易还未被加入到区块链中,也就是说此时投票尚未完成,这时我们不应该允许用户对该帖子再次投票。
在 教程 第3部分 中,我们为 polls 应用创建了一个 URLconf 配置中包含有这一行代码: url(r'^(?...P\d+)/vote/$', views.vote, name='vote'), 我们还创建了一个虚拟实现的 vote() 函数。让我们创建一个真实版本吧。...在本例中, request.POST[‘choice’] 返回了所选择的投票项目的 ID ,以字符串的形式。 request.POST 的值永远是字符串形式的。...这两个视图分别用于显示两种抽象概念 “显示一系列对象的列表” 和 “显示一个特定类型的对象的详细信息页”。 每个视图都需要知道使用哪个模型数据。因此需要提供将要使用的 model 参数。...在之前的教程中,模板提供的上下文中包含了 poll 和 latest_poll_list 上下文变量。
什么时候用 include() ? 在包含其他 URL 模式时,应该始终使用 include()。admin. site .url 是唯一的例外。 现在已经将索引视图连接到 URLconf。...但是,其中一些应用程序至少使用了一个数据库表,因此在使用表之前,我们需要在数据库中创建表。...migrate 命令只会在 INSTALLED_APPS 中运行应用程序的迁移。 创建模型 在我们的投票应用程序中,我们将创建两个模型: 问题和选择。问题有问题和发布日期。...不同的模型字段类型(DateTimeField、CharField)对应于适当的 HTML 输入小部件。每种类型的字段都知道如何在 Django 管理中显示自己。...通常,您需要定制管理表单的外观和工作方式。可以通过在注册对象时告诉 Django 所需的选项来实现。 通过重新排列编辑表单中的字段来了解其工作原理。
第4部分(表单) 编写一个简单的表单 我们更新一下在上一个教程中编写的投票详细页面的模板 ("polls/detail.html") ,让它包含一个 HTML 元素(即表单) 在polls/urls.py中添加 path("/vote/", views.vote, name="vote"), 在polls/views.py中实现vote函数:...在本例中,使用在 教程第 3 部分 中设定的 URLconf, reverse() 调用将返回一个这样的字符串:"/polls/3/results/" 当有人对Question进行投票后, vote()... 现在,在你的浏览器中访问/polls/1/然后为 Question 投票。你应该看到一个投票结果页面,并且在你每次投票之后都会更新。...除了服务端生成的HTML以外,网络应用通常需要一些额外的文件——比如图片,脚本和样式表——来帮助渲染网络页面。在Django中,我们把这些文件统称为“静态(static)文件”。
数据库DDL(注意创建顺序) 为了直接运行DDL语句并创建表,我们需要确保在创建含有外键约束的表之前,相关的被引用表(即外键指向的表)已经存在。...所以我们在创建表的时候一定要按照一定的顺序来创建,否则就会出现没有外键关系导致的创建异常。...每一列都是不可再分的最小数据单元(也称为最小的原子单元)。 解释: 在第一范式中,主要关注的是列的原子性。...也就是说,表中的每一列都应该只包含一个值,而不能包含集合、数组或其他复合数据类型。 例如,如果有一个“地址”列,它包含了街道、城市、省份和国家等信息,那么这就违反了第一范式。...在第二范式中,一个表只能保存一种数据,不可以把多种数据保存在同一张数据库表中。 如果表中的某一列只与复合主键的一部分有关,那么它就不应该存在于这个表中,而应该被分离出去形成另外一张新表。
一个简单表单 更新一下在上一个教程中编写的投票详细页面的模板polls/detail.html,让它包含一个HTML 元素: # polls/templates/polls/detail.html...现在,创建一个Django视图来处理提交的数据,在Part3中已经创建了一个URLconf ,包含这一行: # polls/urls.py url(r'^(?...代码中request.POST['choice']返回被选择Choice的ID,并且值的类型永远是string字符串; 如果在POST数据中没有提供choice,request.POST['choice... 现在,在浏览器中访问/polls/1/然后为Question投票。应该看到一个投票结果页面,并且在每次投票后都会更新。 如果提交时没有选择任何Choice,应该会看到错误信息。...这两个视图分别代表“显示对象列表”和“显示特定类型对象的详细信息页面”的抽象概念。 每个通用视图需要知道它将作用于哪个模型。
过度的推荐让用户停留在“信息茧房”[6]中,但我们还有另一个角度来实现推荐策略。即不考虑用户侧的隐私数据,按照对内容的评分无偏差的对用户进行展示,也就是本文即将描述的基于“热度”的可解释性推荐。...在一个评论系统中,我们的目的是找出最佳评论,不论它是什么时间提交的。 1927年Edwin B....它的数学表达式是这样的: 在上面的公式中, 表示样本的”赞成票比例”, 表示样本的大小, 表示对应某个置信水平的 统计量,这是一个常数,可以通过查前文表得到。.../how-hacker-news-ranking-algorithm-works.html) 9.Reddit排名算法工作原理(https://www.aqee.net/post/how-reddit-ranking-algorithms-work.html...(https://help.imdb.com/article/imdb/featured-content/why-doesn-t-a-title-with-the-average-user-vote-of
为实现这一功能,我们需要使用投票计数器来扩展之前定义的帖子结构体 Post,并引入一个代表投票类型的枚举结构。为了方便前端应用程序调用,我们需要添加一个新建投票事件 NewVote。...函数的参数 _vote 就是我们刚刚定义的投票枚举类型 Ballot ,它的取值为 0、1、2 这三个无符号整数,分别对应三种类型的投票。...在函数中,我们用当前的投票类型更新“好评”投票计数器或“差评”投票计数器,存储已投票用户的信息并发出新建投票事件 NewVote: function vote(uint _postId, uint8 _...我们有许多种不同的方法验证投票函数 vote() 的功能是否符合预期,但在本教程中,我们只检查新建投票事件 NewVote 发出投票的所有者帐户是否与真正执行投票的帐户相同,在代码实现中我们可以借鉴先前的测试...当用户对一个已经投过票的帖子再次进行投票时,投票函数 vote() 将执行失败,这个操作我们可以使用断言( assert )方法来实现: it('should not be able to vote twice
具体而言,每个特征点形成他们自己的预测,然后通过投票来构建“共识”。通过这种方式,本文可以有效地将邻居的预测与局部预测的预测相结合,实现更准确的3D检测。...(4)邻居投票辅助目标预测。 本文在图1中展示了整个框架,并在下面逐一讨论四个步骤。 2.2伪点云生成 ?...为此,本文提出将每个前景2D像素的ROI得分与相应的伪激光点相关联,用分数来表示成为前景点的可能性。 本文发现,在2D图像中,一个远距离的物体虽然小且分辨率低,但通常仍保留一定程度的语义信息。...3.实验 1.验证集上的比较结果。首先,本文与几个最近的单目3D目标检测模型比较了邻居投票的BEV和3D检测精度: 表 1 kitti验证集上的性能比较。...为了确认这一原理,本文比较了baseline网络(仅包含伪点云生成模块和3D检测器)和本文的网络中不同IoU阈值的真阳性和假阳性的数量,如表3所示。
(2) 代码中包含大量与对象状态有关的条件语句:一个操作中含有庞大的多分支的条件(if else(或switch case)语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。...通常 , 有多个操作包含这一相同的条件结构。 State模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。...投票人 * @param voteItem 投票项 * @param voteManager 投票上下文,用来在实现状态对应的功能处理的时候, *...vote(String user, String voteItem, VoteManager voteManager) { //正常投票,记录到投票记录中 voteManager.getMapVote...而平等性强调的是可替换性,大家是同一行为的不同描述或实现,因此在同一个行为发生的时候,可以根据条件挑选任意一个实现来进行相应的处理。
offset ——–返回列表中偏移量为offset的元素 LRANGE:lrange key start end ——返回列表中偏移量在[satrt,end]范围内的元素,包括satrt和end LTRIM...SUNIONSTORE:sunionstore dest-key key1 [key2…] ——将SUNION的结果放到表集合中 (3)示例 redis 127.0.0.1:6379> sadd key1...小试牛刀 简单示例:实现文章发布,获取和投票 (1)文章发布 ONE_WEEK_IN_SECOND = 7*24*60*60 def post_article(conn, user, title,...def article_vote(conn, id, user): '''对文章进行投票,投票规则: (1)投票的有效期时间为1周 (1)一篇文章一周内用户只允许投一次票...(2)分数计算方式为每投一次票加432分 ''' VOTE_SCORE = 432 # 根据文章ID获取文章的发布时间,判断是否在投票的有效期内 article_key
本应用可以像大多数其他应用一样,使用任何一种类型的数据库来实现,但是出于上述原因,我将使用关系数据库。 在第三章中,我向你展示了第一个Flask扩展,在本章中,我还要用到两个。...数据库模型 定义数据库中一张表及其字段的类,通常叫做数据模型。ORM(SQLAlchemy)会将类的实例关联到数据库表中的数据行,并翻译相关操作。...用户表构思完毕之后,我将其用代码实现,并存储到新建的模块app/models.py中,代码如下: from app import dbclass User(db.Model): id = db.Column...第一次数据库迁移 包含映射到User数据库模型的用户表的迁移存储库生成后,是时候创建第一次数据库迁移了。有两种方法来创建数据库迁移:手动或自动。...在microblog.py中实现一个函数,它通过添加数据库实例和模型来创建了一个shell上下文环境: from app import app, dbfrom app.models import User
2.1 改良 URLconf 2.2 改良视图 小结 前言 这一节我们将继续编写投票应用,专注于简单的表单处理并且精简我们的代码。...1 编写一个简单的表单 1.1 模版中新增表单 更新一下在上一个教程中编写的投票详细页面的模板 (“polls/detail.html”) ,增加一个 HTML 元素: {{ question.question_text... 2 通用视图 投票应用中的 detail 和 results 视图的操作都差不多,显得冗余。...这些视图反映基本的 Web 开发中的一个常见情况:根据 URL 中的参数从数据库中获取数据、载入模板文件然后返回渲染后的模板。...小结 这节终于用上了通用视图,再一次感受到了Django框架,把冗余的东西都做了简化抽象。 定义了通用视图,传递给它指定模版,以及模型,一切就OK了。它比 render 快捷函数更加简洁。 ----
def __str__(self): return self.question_text # 创建了一个选项类(表),表中包含三个字段。...Question # 写了一个和后端交互的视图 def index(request): # 按照时间逆序排列,查询前五个数据表中存在的投票,存储为列表 latest_question_list...我们需要在投完票后添加这个功能,所以我们需要更改vote这个视图函数来实现这个功能。.../', views.vote, name='vote'), ] 注意,第二个和第三个匹配准则中,路径字符串中匹配模式的名称已经由 改为 。...2、改良视图 在视图中,我们是通过get方法获取数据表中的数据然后赋值给一个变量(对象),但我们也可以直接把数据表搬到视图中,这应该就是所谓的通用视图吧。
定义模型 模型这个术语表示程序使用的持久化实体。在 ORM 中,模型一般是一个 Python 类,类中的属性对应数据库表中的列。...Flask-SQLAlchemy 创建的数据库实例为模型提供了一个基类以及一系列辅助类和辅助函数,可用于定义模型的结构。...,表中列的属性由 db.Column 来定义 下面是一些常用的列类型 ?...数据库迁移 在开发程序的过程中,我们会发现有时需要修改数据库模型,而且修改之后还需要更新数据库。 仅当数据库表不存在时,Flask-SQLAlchemy 才会根据模型进行创建。...我们可以在命令行中输入 flask--help 查看所有可 用的命令和说明。
领取专属 10元无门槛券
手把手带您无忧上云