django怎么实现星级评分

2023-03-07 17:01:03 5 0
卡卡

导读:今天恰卡编程网来给各位分享关于django怎么实现星级评分的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

用python django开发online judge时, 测评系统能不能用c++实现?这两个最后怎么连接?

TimeMemory篇

django怎么实现星级评分

(一)思路:

先利用subprocess.Popen(),调用外部命令执行程序,将.in文件输入,将程序运行结果保存在.out文件中。程序数据输入和结果保存完成了,接下来就是时间和内存的问题。通过pid获取进程号,然后利用psutil模块实现进程的控制与监听,即可完成一个简单的TimeMemory的判断。

(二)代码:

import time

import subprocess

import psutil

dir_work = "./"

fin = open("./main.in", "r+")

fout = open("./main.out", "w+")

p_cmd = { # 运行程序的命令,这里以C++、C语言为例

"gcc": "./main",

"g++": "./main",

}

def time_mem(language):

"""

执行程序获取执行时间与内存

"""

time_limit = 1 #second 时间限制

mem_limit = 128 * 1024 #kb 内存限制

max_rss = 0 #记录最大内存

problem_info = {} #时间单位ms 内存单位kb

p = subprocess.Popen(p_cmd[language],shell=True,cwd=dir_work, stdin=fin, stdout=fout, stderr=subprocess.PIPE) # cwd设置工作目录

start = time.time() #开始时间

print("程序开始运行的时间是%s" % start)

pid = p.pid

glan = psutil.Process(pid) #监听控制进程

while True:

time_now = time.time() - start # ??

if psutil.pid_exists(pid) is False: #运行错误

problem_info['time'] = time_now*1000

problem_info['memory'] = max_rss/1024.0

problem_info['result'] = "Runtime Error"

return problem_info

m_infor = glan.memory_info()

print(m_infor)

rss = m_infor[0] #获取程序占用内存空间 rss

if p.poll() == 0: #运行正常结束,跳出循环,继续判断

end = time.time()

break

django的group_by

django 的ORM中并没有单独的group_by方法,而是通过values + annotate的方式来实现group_by.

eg. 假如我们有个visit_record表. 记录网页每天的访问记录。

id | page_url | domain | pv | uv | date

通过(page_url, domain)唯一确定一个系统。

当values和annotate一起用的时候,values的字段就自动承担起了group_by的作用。 这个语句相当于:

需要注意与order_by一起用的时候,如果order_by的字段不在所选字段中或order_by字段是无效的会导致group_by不生效。

例如上述语句的order_by改成 order_by('-pv', 'id') 会导致语句变成 ... group by id 。

想一下应该可以理解,因为group_by按照page_url和domain聚合之后,得到的记录是多条记录的pv之和,不存在对应的是哪个id的记录,所以没法按照id排序,所以会导致group_by失效。

参见官方文档:

django的架构设计

Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下: 层次 职责 模型(Model),即数据存取层 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 模板(Template),即表现层 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。 视图(View),即业务逻辑层 存取模型及调取恰当模板的相关逻辑。模型与模板之间的桥梁。 从以上表述可以看出Django 视图不处理用户输入,而仅仅决定要展现哪些数据给用户,而Django 模板 仅仅决定如何展现Django视图指定的数据。或者说, Django将MVC中的视图进一步分解为 Django视图 和 Django模板两个部分,分别决定 “展现哪些数据” 和 “如何展现”,使得Django的模板可以根据需要随时替换,而不仅仅限制于内置的模板。

至于MVC控制器部分,由Django框架的URLconf来实现。URLconf机制是使用正则表达式匹配URL,然后调用合适的Python函数。URLconf对于URL的规则没有任何限制,你完全可以设计成任意的URL风格,不管是传统的,RESTful的,或者是另类的。框架把控制层给封装了,无非与数据交互这层都是数据库表的读,写,删除,更新的操作.在写程序的时候,只要调用相应的方法就行了,感觉很方便。程序员把控制层东西交给Django自动完成了。 只需要编写非常少的代码完成很多的事情。所以,它比MVC框架考虑的问题要深一步,因为我们程序员大都在写控制层的程序。现在这个工作交给了框架,仅需写很少的调用代码,大大提高了工作效率。

如何在Django模型中管理并发性

1、我们在我们的查询器上使用select_for_update来告诉数据库锁定对象,直到事务完成。

2、在数据库中锁定一行需要一个数据库事务 - 我们使用Django的装饰器transaction.atomic来定义事务。

3、我们使用类方法而不是实例方法 - 我们告诉数据库要上锁,然后它会返回锁的对象给我们。 为了实现这一点,我们需要从数据库中获取对象。 如果我们使用self,那么就是在操作一个已经从数据库中获取出来的对象,这个对象无法保证自己是没有被上锁的。

4、帐户中的所有操作都在数据库事务中执行。

JWT认证在Django中的简单实现

添加JWT认证选项:

Django REST framework JWT内已经提供了登录签发JWT的视图方法,可以直接使用,不用再定义视图逻辑。

使用JWT认证登录的后端设置就完成了。

结语:以上就是恰卡编程网为大家整理的关于django怎么实现星级评分的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于django怎么实现星级评分的相关内容别忘了在本站进行查找喔。

收藏
分享
海报
0 条评论
5
上一篇:django如何自动换行(2023年最新解答) 下一篇:win10如何搭建django框架(2023年最新分享)

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码