[PythonWeb:Django框架]:前后端请求调用;

文章目录

  • 接着上篇
  • 项目app包下面创建static包,引入jquery,bootstrap 相关js文件
  • views.py编写api
  • compute文件夹下面的urls.py路由模块引入views.py刚刚定义的函数
  • html发送ajax请求

接着上篇

https://blog.csdn.net/Abraxs/article/details/138739727?spm=1001.2014.3001.5501
在这里插入图片描述

项目app包下面创建static包,引入jquery,bootstrap 相关js文件

在这里插入图片描述

views.py编写api

from django.shortcuts import render
import subprocess
from django.views.decorators.http import require_POST
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
def home(request):return render(request, 'index.html')def run_code(code):try:code = 'print(' + code + ')'output = subprocess.check_output(['python', '-c', code],universal_newlines=True,stderr=subprocess.STDOUT,timeout=30)except subprocess.CalledProcessError as e:output = '公式输入有误'return output@csrf_exempt
@require_POST
def compute(request):code = request.POST.get('code')result = run_code(code)return JsonResponse(data={'result': result})

这段Django的view.py文件内容包含两个函数:run_code和compute,用于处理用户提交的Python代码片段并执行它。以下是详细的分析:

run_code 函数
这个函数尝试将用户提供的code字符串包装在一个print()函数中,并使用subprocess模块在子进程中执行Python代码。如果执行成功,它将返回输出;如果执行失败(如语法错误),它将捕获subprocess.CalledProcessError异常并返回一个固定的错误消息“公式输入有误”。

存在的问题:

安全风险:直接执行用户提供的代码是极其危险的,因为它可能导致服务器被攻击者利用来执行恶意代码。
错误处理:错误消息“公式输入有误”可能不足以解释实际发生的错误,特别是当错误是由Python语法或其他非预期的问题引起时。
代码注入:如果用户提供的code包含特定的字符串(如引号),它可能会破坏print(’ + code + ')这个字符串的结构,导致语法错误或更糟糕的情况。
compute 函数
这个函数是一个Django视图,它接受POST请求,从请求中获取名为code的参数,调用run_code函数执行代码,并将结果作为JSON响应返回。

存在的问题:

CSRF保护:使用@csrf_exempt装饰器意味着这个视图不受CSRF保护。由于这个视图处理的是用户提交的代码,因此它应该受到CSRF保护,除非你有特定的理由不这样做。
权限验证:视图没有显示任何权限验证的逻辑,这意味着任何用户都可以提交代码并在服务器上执行它。
输入验证:没有对用户提供的code进行任何形式的验证或清理,这增加了安全风险。
安全建议
不要执行用户提供的代码:除非你完全理解并接受相关的安全风险,否则永远不要在生产环境中执行用户提供的代码。
使用安全的替代方案:考虑使用安全的沙箱环境(如Docker容器)或安全的代码执行库(如PyPy的sandboxing功能)来执行用户代码。
实现输入验证和清理:对用户提供的输入进行验证和清理,以防止代码注入和其他类型的攻击。
实施权限验证:确保只有授权的用户才能提交和执行代码。
启用CSRF保护:对于处理POST请求的Django视图,启用CSRF保护是一个好的安全措施。

compute文件夹下面的urls.py路由模块引入views.py刚刚定义的函数

urlpatterns = [path('admin/', admin.site.urls),path('', home, name='home'), # 首页路由path('compute/', compute, name='compute'),  # 添加针对公式计算compute的路由
]

html发送ajax请求

<script>$('#lgbut_compute').click(function () {$.ajax({url: '/compute/',type: 'POST',data: {'code': $('#txt_code').val()},dataType: 'json',success: ShowResult})})</script>

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/11805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

24年湖南三支一扶报名详细流程(电脑报名)

24年湖南三支一扶报名详细流程&#xff08;电脑报名&#xff09; #湖南三支一扶 #湖南三支一扶考试 #三支一扶报名照片 #三支一扶考试 #三支一扶 #湖南省三支一扶

[语言月赛 202404] 吃苹果

题目描述 一共有 n 只苹果&#xff0c;你想要选择其中恰好两只苹果。 每只苹果有一个营养值 a1​,a2​,⋯,an​&#xff0c;你需要选择一只营养值最大的给 gza 吃&#xff0c;选择一只营养值最小的给 gza 的朋友 azg 吃。 请注意&#xff0c;由于某些苹果会有虫蚀等等&#…

Java基础(34)大型网站在架构上应当考虑哪些问题

大型网站的架构设计面临着多方面的挑战&#xff0c;这些挑战要求开发者和架构师在设计之初就需要考虑全面。以下是一些最关键的考虑因素&#xff0c;它们共同决定了一个大型网站是否能够成功满足业务需求、用户体验和技术发展的需要。 1. 可扩展性&#xff08;Scalability&…

深度剖析深度神经网络(DNN):原理、实现与应用

目录 引言 一、DNN基本原理 二、DNN核心算法原理 三、DNN具体操作步骤 四、代码演示 引言 在人工智能和机器学习的浪潮中&#xff0c;深度神经网络&#xff08;Deep Neural Network&#xff0c;简称DNN&#xff09;已经成为了一种非常重要的工具。DNN模仿人脑神经网络的结…

paddle ocr v4 2.6.1实战笔记

目录 效果图&#xff1a; 安装 模型权重是自动下载&#xff0c;如果提前下载会报错。 识别orc&#xff0c;并opencv可视化结果&#xff0c;支持中文可视化 官方原版预测可视化&#xff1a; 效果图&#xff1a; 安装 安装2.5.2识别结果为空 pip install paddlepaddle-gpu…

二维数组:行列互换/求最大值及其所在位置/求各行各列的和/矩阵乘积/深入理解二维数组

二维数组 1.定义 只有行号可以省略&#xff0c;初始化 全部初始化/部分初始化/不初始化 2.元素引用 3.存储形式 :顺序存储 按行存储 4.深入理解二维数组 #include<stdio.h> #include<stdlib.h>#define M 2 #define N 3int mian() {int a[M][N] {{1,2,3},{4,5,6}}…

【Python探索之旅】选择结构(条件语句)

文章目录 条件结构&#xff1a; 1.1 if单分支结构 1.2 if-else 多分支结构 1.3 if-elif 多重结构&#xff1a; 完结撒花​ 前言 Python条件语句是通过一条或多条语句的执行结果&#xff08;True或者False&#xff09;来决定执行的代码块。 Python提供了顺序、选择、循环三…

redis和mysql数据库主要的区别

MySQL和Redis作为两种不同类型的数据库&#xff0c;它们之间存在显著的区别&#xff0c;主要体现在以下几个方面&#xff1a; 数据结构与类型&#xff1a; MySQL&#xff1a;是一种关系型数据库管理系统(RDBMS)&#xff0c;支持丰富的数据结构&#xff0c;如表格形式的行和列&a…

Git详解之六:Git工具

现在&#xff0c;你已经学习了管理或者维护 Git 仓库&#xff0c;实现代码控制所需的大多数日常命令和工作流程。你已经完成了跟踪和提交文件的基本任务&#xff0c;并且发挥了暂存区和轻量级的特性分支及合并的威力。 接下来你将领略到一些 Git 可以实现的非常强大的功能&…

重学java 37.多线程基本了解

尽管走自己的路&#xff0c;别被那些三言两语击倒 —— 24.5.13 一、多线程_线程和进程 进程&#xff1a;在内存中执行的应用程序 线程:是进程中最小的执行单元线程作用:负责当前进程中程序的运行,一个进程中至少有一个线程,一个进程还可以有多个线程,这…

缓存淘汰(LRU)算法

LRU&#xff08;最近最少使用&#xff09;算法是一种常见的缓存淘汰策略&#xff0c;广泛应用于操作系统、数据库缓存、网页缓存等领域。该算法的核心思想是优先淘汰那些最长时间未被使用的数据&#xff0c;基于的假设是如果数据最近被访问过&#xff0c;那么将来被访问的可能性…

英伟达科学家展望:OpenAI或将引领AI多模态语音助手新时代

在人工智能领域,语音助手一直是人们关注的焦点。随着技术的不断发展,从简单的语音指令识别到复杂的对话系统,语音AI正逐渐融入我们的日常生活。今晚凌晨2点,OpenAI可能发布的AI多模态语音助手无疑将再次引发业界的热烈讨论。英伟达科学家KOL近日对此进行了深入解读,为我们…

永嘉原厂8×16点阵数码管驱动抗干扰数码管驱动IC防干扰数显芯片VK1640 SOP28

产品型号&#xff1a;VK1640 产品品牌&#xff1a;永嘉微电/VINKA 封装形式&#xff1a;SOP28 原厂&#xff0c;工程服务&#xff0c;技术支持&#xff01; 概述 VK1640是一种数码管或点阵LED驱动控制专用芯片&#xff0c;内部集成有数据锁存器、LED 驱动等电路。SEG脚接LE…

网络安全快速入门(十二) linux的目录结构

我们前面已经了解了基础命令&#xff0c;今天我们来讲讲linux中的目录结构&#xff0c;我们在了解linux的目录结构之前&#xff0c;我们先与Windows做一个对比 12.1linux和windows的目录结构对比 在之前认识liunx的章节中&#xff0c;我们已经简单说明了linux和window的目录结构…

day2 leecode88 合并两个有序数组

leetcode88合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 **注意&#xf…

Java面试八股之String类的常用方法有哪些

Java中String类的常用方法有哪些 获取字符串信息&#xff1a; length()&#xff1a;返回字符串的字符数。 isEmpty()&#xff1a;判断字符串是否为空&#xff08;即长度为0&#xff09;。 访问单个字符&#xff1a; charAt(int index)&#xff1a;返回指定索引处的字符。 …

射频识别技术初探

射频识别技术 引言RFID的构成RFID标签读写器天线中间件应用软件RFID的工作流程RFID标准ISO/IEC RFID 标准体系RFID的数据传输原理RFID的编码方式引言 射频识别技术是一种无线通信识别技术,通过无线电信号识别特定目标并读取相关数据,而无需建立专门的机械或光学接触。 无线…

Mamba:6 线性RNN

若在阅读过程中有些知识点存在盲区&#xff0c;可以回到如何优雅的谈论大模型重新阅读。另外斯坦福2024人工智能报告解读为通识性读物。若对于如果构建生成级别的AI架构则可以关注AI架构设计。技术宅麻烦死磕LLM背后的基础模型。当然最重要的是订阅跟随“鲁班模锤”。 Mamba自从…

mapreduce的优化方法

1、数据输入 &#xff08;1&#xff09;合并小文件&#xff1a;在执行mr任务前将小文件进行合并&#xff0c;大量的小文件会产生大量的map任务&#xff0c;增大map任务装载次数 &#xff0c;而任务的装载比较耗时 &#xff0c;从而导致 mr 运行较慢。 &#xff08;2&#xff09…

YOLO数据集制作(四)|json文件转txt验证(多边形框)

以下教程用于验证转成YOLO使用的txt格式&#xff0c;适用场景&#xff1a;多边形框&#xff0c;配合json格式文件转成YOLO使用的txt格式脚本使用。 YOLO数据集制作&#xff08;三&#xff09;|Labelme标注的“多边形框”json文件转txt-CSDN博客 使用方式&#xff1a;将img_pa…