前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Django快速搭建reportServer

使用Django快速搭建reportServer

作者头像
我是胖虎啊
发布2022-12-20 15:52:41
2460
发布2022-12-20 15:52:41
举报
文章被收录于专栏:测试开发卷货

使用Django快速搭建reportServer

写此文章的目的

  1. 提供一个解决问题的思路, 大家遇到类似问题时可以快速想到解决问题的方案
  2. 自己也review一下Django相关的基础知识, 方便后续解决工作中的问题

背景

最近想开发一个基础的服务(reportServer), 提供管理测试报告的相关功能

首先讲下大概业务逻辑, 提供2个接口:

  • 1个是提供上传文件的接口, 接受report的上传, 然后server将上传的report文件保存到本地
  • 第2个是提供report的访问接口, 返回html形式的report链接

技术栈选型

因为以前学过Django基础, 而且觉得Django搭建起来还是挺方便的, 所以决定使用Django写几个接口, 完成此次功能

Django的MVT模式

对于本次需求来说, 没涉及到数据库相关操作, 只需要关注其中的URL层 + View层即可!

实际操作

安装Django环境

代码语言:javascript
复制
# 豆瓣源
pip install Django -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 

创建django项目

代码语言:javascript
复制
# 创建项目
django-admin startproject 项目名

# 本次使用
django-admin startproject reportServer

启动服务

代码语言:javascript
复制
# 启动服务
python manage.py runserver

common层方法

主要写了log的配置方法, 使用的loguru模块

代码语言:javascript
复制
# 豆瓣源
pip install loguru -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 

文件内容如下:

代码语言:javascript
复制
from loguru import logger
import os


log_name = os.path.join(os.path.abspath(os.path.dirname(os.path.dirname(__file__))), "log", "reportServer.log")
print("my_log_name: ", log_name)
logger.add(log_name, format = "{time:YYYY-MM-DD-HH:mm:ss} | {level} | {message}", enqueue = True,
           backtrace = False)

编写view层方法

我是在reportServer新创建了myView.py文件

文件内容如下:

代码语言:javascript
复制
from django.http import HttpResponse, JsonResponse
import os
import time
from reportServer.common.my_logger import logger

# 文件上传接口
def handle_upload_file(request):
    if request.method == 'POST':
        file_obj = request.FILES.get('file')
        current_time = str(int(time.time()))
        report_path = os.path.join(os.path.dirname(__file__), "report", current_time)
        if not os.path.exists(report_path):
            os.makedirs(report_path)

        logger.info(
            f"upload_request_info, request_path: {request.path}, report_path: {report_path}, file_name: {request.FILES['file'].name})")
        try:
            f = open(os.path.join(report_path, file_obj.name), 'wb')

            for chunk in file_obj.chunks():
                f.write(chunk)
            f.close()
        except IOError as e:
            print("上传文件失败, error: ", e)
            dic_response_error = {"msg": "upload error", "report_url": None, "error_msg":e}
            return JsonResponse(dic_response_error, json_dumps_params = {'ensure_ascii': False})
        visit_url = "http://127.0.0.1:8000" + "/report" + "/" + current_time + "/" + "report.html"
        dic_response_success = {"msg": "upload success", "report_url": visit_url}
        logger.info(f"handle_upload_file success: {dic_response_success}")
        return JsonResponse(dic_response_success, json_dumps_params = {'ensure_ascii':False})
    else:
        dic_response_fail = {"msg": "upload Fail", "report_url": None}
        logger.info(f"handle_upload_file fail: {dic_response_fail}")
        return JsonResponse(dic_response_fail, json_dumps_params = {'ensure_ascii':False})

# 获取测试报告接口
def get_report(request, id):
    report_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "report", str(id), "report.html")
    print("report_path: ", os.path.join(os.path.abspath(os.path.dirname(__file__)), "report", str(id), "report.html"))

    with open(report_path, "rb") as file:
        response = HttpResponse(file.read())
    request_path = request.path
    logger.info(f"get_report success, request_path: {request_path}")

    return response


运行

  1. 首先确保目录正确, 在reportServer目录下应该有3个目录: common, log, report
  2. 启动命令如下
代码语言:javascript
复制
# 启动服务
python manage.py runserver

访问

外部调用上传接口示例, 如下图所示:

这样server就会将上传的html文件存储到report目录了!

  1. 访问刚上传的html文件, 可以直接调用上面返回的report_url链接即可!
  2. 相关日志记录在log目录中了, 大家也可以根据需要自行在代码中, 使用类似logger.info()的语句打需要的日志

后续

胖虎觉得上面的功能并没有什么复杂的实现, 但是可以「解决实际问题」, 而且「非常实用」!

目前我是根据实际工作需要, 用到什么学什么, 遇到问题后, 尝试使用已掌握的知识储备解决问题, 这种思路去学习的, 希望对你有所启发~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发卷货 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用Django快速搭建reportServer
    • 写此文章的目的
      • 背景
        • 技术栈选型
          • Django的MVT模式
            • 实际操作
              • 安装Django环境
              • 创建django项目
              • 启动服务
              • common层方法
              • 编写view层方法
              • 运行
              • 访问
            • 后续
            相关产品与服务
            文件存储
            文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档