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

2024-05-14 06:44

本文主要是介绍[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>

在这里插入图片描述

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

这篇关于[PythonWeb:Django框架]:前后端请求调用;的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/988037

相关文章

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

python如何调用java的jar包

《python如何调用java的jar包》这篇文章主要为大家详细介绍了python如何调用java的jar包,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录一、安装包二、使用步骤三、代码演示四、自己写一个jar包五、打包步骤六、方法补充一、安装包pip3 install

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现