[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

相关文章

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp