You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求将可正常打印的Flask收据打印机代码转换为Django实现

问题:将CloudPRNT收据打印机驱动的Flask代码转换为Django实现

我需要实现通过POST/GET命令驱动收据打印机的功能。自行编写的Django代码运行无报错但无法打印,对应的Flask代码可正常工作,请求将这套Flask代码转换为正确的Django实现。

我的Django尝试代码

import requests
import json
from email import header
import mimetypes
import urllib.request
from urllib import response
from django.http import HttpResponse
from django.http import JsonResponse
content = "some content"

if request.method == "POST":
    data = {"jobReady": "true", "mediaTypes":["text/plain"]}
    return JsonResponse(data)

if request.method == "GET":
    data = open("print.txt","r") 

    response_r = {
        'response':data,
        'status':200,
        'mimetype':'text/plain'
    }
    return HttpResponse(response_r)
    
if request.method == "DELETE":
    status_code = request.GET['code']

    if (status_code == "200 OK"):
        print("Success")
        return HttpResponse(status=200)

    if (status_code == "211 OK Paper Low"):
        print("Success, Paper Low")
        return HttpResponse(status=200)

可用的Flask代码

from email import header
import mimetypes
from urllib import response
import urllib.request
from flask import Flask, request, jsonify, Response, make_response

app = Flask(__name__)

#flask --app CloudPRNTDemo run -h 192.168.1.218 -p 8000
@app.route('/')
def home():
    yes = ("home page")
    return(yes)

@app.route('/print/', methods=['POST', 'GET', 'DELETE'])
def cloudPRNTPOST():
    if request.method == "POST":
        data = {"jobReady": "true", "mediaTypes":["text/plain"]}
        print(data)
        return jsonify(data)

    if request.method == "GET":
        data = open("print.txt","r")        
        response_r = app.response_class(
            response=data,
            status=200,
            mimetype='text/plain'
        )
        # response.headers['X-Star-Buzzerendpattern'] = 1
        return response_r
    if request.method == "DELETE":
        status_code = request.args.get('code')
        print(status_code)

        if (status_code == "200 OK"):
            print("Success")
            return app.response_class(status=200)

        if (status_code == "211 OK Paper Low"):
            print("Success, Paper Low")
            return app.response_class(status=200)

    return 
    

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000, debug = True)

正确的Django实现代码

Django视图必须封装为接收request参数的函数,同时需要配置对应路由,以下是完整转换代码:

views.py文件内容

from django.http import HttpResponse, JsonResponse

def home(request):
    return HttpResponse("home page")

def cloud_prnt(request):
    if request.method == "POST":
        data = {"jobReady": "true", "mediaTypes": ["text/plain"]}
        print(data)
        return JsonResponse(data)

    elif request.method == "GET":
        # 安全读取打印文件内容,自动关闭文件
        with open("print.txt", "r") as f:
            data = f.read()
        # 构造文本响应
        response = HttpResponse(data, status=200, content_type='text/plain')
        # 如需添加自定义响应头(比如蜂鸣设置),取消下方注释
        # response['X-Star-Buzzerendpattern'] = '1'
        return response

    elif request.method == "DELETE":
        status_code = request.GET.get('code')
        print(status_code)

        if status_code == "200 OK":
            print("Success")
            return HttpResponse(status=200)
        elif status_code == "211 OK Paper Low":
            print("Success, Paper Low")
            return HttpResponse(status=200)
    
    # 处理未定义的请求方法
    return HttpResponse(status=405)

urls.py配置(在你的Django应用中)

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('print/', views.cloud_prnt, name='cloud_prnt'),
]

原Django代码的问题说明

  1. 视图结构错误:原代码未将逻辑封装为接收request参数的函数,Django视图必须以函数/类视图形式存在,且第一个参数为request对象。
  2. GET请求响应错误:原代码将文件对象包装为字典传给HttpResponse,正确做法是读取文件内容后传入,或直接传入文件对象(推荐用with语句确保文件关闭)。
  3. 参数获取不安全:原代码用request.GET['code']会在参数不存在时触发KeyError,改用request.GET.get('code')可避免报错。
  4. 缺少默认返回:原代码未处理未定义的请求方法,应返回405状态码表示方法不允许。

内容的提问来源于stack exchange,提问作者stelity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:07:06