django 限定只能是post请求访问视图 200317

发起post请求

普通的视图函数

在这里插入图片描述

发起一个post请求
在这里插入图片描述

返回为成功

限定只可以post方式请求视图

使用装饰器装饰一下子

@require_http_methods(['POST'])

在这里插入图片描述

同理还有require_POST

用法与require_GET 一样

根据请求类别不同 给出不同的逻辑

在这里插入图片描述

request.method

根据请求方式判断,给出不同的分支来执行

### Django 中的文件管理 #### 文件上传机制 在Django框架内,文件或图片通常经由表单完成上传操作。当用户从前端选取并提交文件时,该动作以POST请求的形式发送至服务器[^2]。 对于小于等于2.5MB大小的小型文件,在接收后会被暂时保存于服务器内存之中;而超过此阈值的大尺寸文件则会直接被放置到临时位置等待进一步处理。最终这些文件都会按照设定好的路径写入磁盘相应的位置,默认情况下位于项目根目录下的`/media/`子目录下,并保留原始名称作为其存储名。 然而需要注意的是,这种简单的做法可能导致同名文件之间的冲突以及潜在的安全隐患——比如恶意脚本(JavaScript、可执行程序等)。为了避免这些问题的发生,在设计应用程序逻辑之初就应该考虑到: - **防止重名覆盖**:可以通过修改文件名为唯一标识符加上原扩展名的方式解决; - **限定允许上传类型**:只接受特定类型的文件输入可以有效减少风险; - **设置最大体积限制**:避免过大的文件占用过多资源甚至拖垮服务性能。 ```python from django.core.files.storage import default_storage from django.http import JsonResponse import os def upload_file(request): if request.method == 'POST': my_file = request.FILES.get('file', None) # Check file type and size here before saving path = default_storage.save(my_file.name, ContentFile(my_file.read())) tmp_file = os.path.join(settings.MEDIA_ROOT, path) return JsonResponse({'status': 'success'}) ``` 上述代码展示了如何获取来自HTTP POST请求中的文件对象并通过内置方法save()来指定目标路径进行持久化保存。 #### 文件下载接口实现 为了提供给客户端下载已上传文件的功能,可以在视图函数中定义相应的路由映射关系。下面是一个具体的例子说明怎样构建这样的API端点[^3]: ```python from django.conf import settings from django.http import HttpResponse, Http404 import mimetypes import os def download(request, nid): try: row_object = Filemanage.objects.filter(id=nid).first() file_path = os.path.join('/upload/', row_object.name) full_file_path = os.path.join(settings.MEDIA_ROOT, row_object.name) if not os.path.exists(full_file_path): raise Http404("File does not exist") with open(full_file_path, 'rb') as fh: mime_type, _ = mimetypes.guess_type(full_file_path) response = HttpResponse(fh.read(), content_type=mime_type or 'application/octet-stream') response['Content-Disposition'] = f'attachment; filename={os.path.basename(file_path)}' return response except Exception as e: return HttpResponse(str(e), status=400) ``` 这段Python代码片段实现了基于ID参数查找对应记录,并返回对应的二进制流供浏览器解析成可供下载的内容。同时设置了合适的响应头部信息以便指示这是一个附件而非网页内容,从而触发用户的下载行为而不是尝试在线打开它。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值