导读:今天恰卡编程网来给各位分享关于django怎么实现星级评分的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
用python django开发online judge时, 测评系统能不能用c++实现?这两个最后怎么连接?
TimeMemory篇
(一)思路:
先利用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怎么实现星级评分的相关内容别忘了在本站进行查找喔。
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~