GameMale
登陆 / 注册 搜索

USERCENTER

SEARCHSITE

搜索

查看: 1397|回复: 33
收起左侧

[实用工具] 基于Python Flask框架的一键保存为txt文件的两段代码

[复制链接] |关注本帖

邪恶的面具堕落之舞风雪之家香喷喷的烤鸡眼镜蛇图腾寻觅牧羊人

     楼主| 白冥 发表于 2024-4-25 00:49:03 | 显示全部楼层 |阅读模式 |取消关注该作者的回复
    本帖最后由 白冥 于 2024-4-25 12:55 编辑

    我们用一个20*50大小的文本域(textarea)写日志,指定文件名,并由fetchAPI发送为json
    1. from flask import Flask, request,jsonify,json
    2. from flask_cors import CORS
    3. import os
    4. cwd=os.getcwd()
    5. dst=cwd[0:2]+'/Logs/'
    6. if os.path.isdir(dst):
    7.     pass
    8. else:
    9.     os.makedirs(dst)
    10. app=Flask(__name__)
    11. cors=CORS(app,resources={r"/*":{"origins":"*"}})
    12. @app.route('/save_log',methods=['POST','OPTIONS','GET'])
    13. def save_log():
    14.     data=request.data
    15.     if data:
    16.         message=json.loads(data)
    17.         with open(dst+message['filename']+'.txt','w') as f:
    18.             f.write(message['log'])
    19.     else:
    20.         pass
    21.     return  jsonify({"信息":"已成功上传为txt文件"})
    22. if __name__ == '__main__':
    23.     app.run(debug=True)
    复制代码

    由于Python Flask框架默认监视端口为5000,所以前端部分要完整给出,由于在本机,所以用的是巡回地址。
    写这段代码的时候遇到过不少问题,比如CORS越域,不得不再下载个flask-corsPython包,而在处理时候,还遇到过http请求有三个却只有一个有内容导致json反序列化失败的现象,干脆有才反序列化,没有直接pass过去。
    由于我发的时候发现发这里代码好像没有缩进,所以给加了空格,但不能保证发出来空格在不在。python对缩进有严格要求,所以如果大家看到发出来没有缩进,我也没办法。

    评分

    参与人数 2血液 +9 追随 +2 收起 理由
    除却巫山不是云 + 6 + 1 赞一个!
    Riverlethe + 3 + 1

    查看全部评分

      收起(1)
    • 白冥 白冥 :这里前端部分的代码好像被吞了:
      <!DOCTYPE html>
      <html lang=\"en\">
      <head>
          <meta charset=\"UTF-8\">
          <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">
          <title>savelog</title>
      </head>
      <body>
          <textarea id=\"logArea\" rows=\"20\" cols=\"50\"></textarea>
          <input type=\"text\" id=\"filename\" placeholder=\"my_log\"/>
          <button onclick=\"saveLog()\">一键保存</button>
          <script>
              function saveLog(){
                  const log = document.getElementById(\'logArea\').value;
                  const filename=document.getElementById(\'filename\').value;
                  const url=\'http://127.0.0.1:5000/save_log\';
                  const argsObject={
                      method:\'OPTIONS\',
                      headers:{
                          \'Content-Type\':\"application/json\"
                      },
                      body:JSON.stringify({\"log\":log,\"filename\":filename})
                  }
                  fetch(url,argsObject);
              }
          </script>
      </body>
      </html>
      2024-04-25 00:51 回复
    • 我也说一句

    回复

    使用道具 举报

    美恐:新的开始风物长宜最终幻想XIV生化危机:复仇赛博朋克2077安杜因·乌瑞恩约翰-117罗根

      回复

      使用道具 举报

      内森·德雷克業火死鬥诺克提斯·路西斯·伽拉姆BIG BOSS克莱夫・罗兹菲尔德岛田半藏性感男神GM莱因哈特·威尔海姆

        koh 发表于 2024-4-25 01:02:01 | 显示全部楼层 |取消关注该作者的回复
        如果是便利的东西,建议发在code区
        回复

        使用道具 举报

        诺克提斯·路西斯·伽拉姆Forever Titanic業火死鬥钢铁侠永远的克叔极·龙の意死灵之书卡利亚权杖虚空之海的鲸史莱姆牧场

          回复

          使用道具 举报

          不曾寄出的信件『随时随地开启!』漂洋小船『随时随地开启!』冒险用指南针破损的旧书丛林的鸟飞走了雪王的心脏人鱼之泪幽灵竹筒

            看起来挺强大的代码惹,好专业的感觉
            回复

            使用道具 举报

            百相千面-晦永远的克叔業火死鬥实现梦想官复原职虚空之海的鲸Zootopia幸运女神的微笑『逆境中的幸运女神』御医神兔

              楼主的意思是要求助一个人看看代码吗?如果是求助,那需要发悬赏帖的
                收起(2)
              回复

              使用道具 举报

              朴素的誓言无瑕的回忆『逆境中的幸运女神』幸运女神的微笑GHOST瓮中能言蛙近地夜航

                回复

                使用道具 举报

                炙热的格拉迪欧拉斯晓月终焉奧倫亚力斯塔尔加勒特·霍克威克多尔·克鲁姆库伦 (审判)

                  讨论一下啊


                  看了一下代码,其实如果只是本地的话,不需要去解决cors的问题。

                  @app.route('/')

                  然后把你的html作为静态页面输出就行了。这样就是同域了。

                  另外就是这个功能我感觉其实不需要用到flask,纯前端就能完成。

                  我随便找了个现成代码改了改差不多就是这样了

                  1. <html>
                  2. <head>
                  3.   <meta charset="utf-8">
                  4.   <title>保存文本文件到本地</title>
                  5. </head>
                  6. <body>
                  7.   <textarea id="json" value="qqq"></textarea>
                  8. <input id="filename" placeholder="文件名" />
                  9.   <button id="save">保存</button>
                  10. </body>
                  11. <script type="text/javascript">
                  12.     createAndDownloadFile=function(fileName, content) {
                  13.         const aTag = document.createElement('a');
                  14.         const blob = new Blob([content]);
                  15.         aTag.download = fileName;
                  16.         aTag.href = URL.createObjectURL(blob);
                  17.         aTag.click();
                  18.         URL.revokeObjectURL(aTag.href);
                  19.     }
                  20.     const save=document.querySelector("#save");
                  21.     save.addEventListener("click",function(){
                  22.         const filename = document.querySelector('#filename')?.value
                  23.         const content = document.querySelector('#json')?.value
                  24.         try {
                  25.            JSON.parse(content)
                  26.            createAndDownloadFile(filename ,content);
                  27.        } catch (e) {
                  28.           console.log(e)
                  29.        }
                  30.     });
                  31. </script>
                  32. </html>
                  复制代码




                  回复

                  使用道具 举报

                  希尔瓦娜斯·风行者麦迪文(Medivh)阿尔萨斯‧米奈希尔创生之柱卡德加(Khadgar)安杜因·乌瑞恩我的天使夏日柯基幸福的小阿尔吃饱金币的Doge

                    回复

                    使用道具 举报

                    特殊-家园卫士Ⓡ眼镜蛇图腾猎鹰图腾山猫图腾森林羊男质量效应三部曲红龙幼崽

                      回复

                      使用道具 举报

                      男巫之歌缘起星空信仰之心不灭狂雷『不败之花』情难自抑崩朽之青铜龙王泰比里厄斯業火死鬥永远的克叔

                        和用word打一段文字并保存的区别素?
                          收起(1)
                        回复

                        使用道具 举报

                        亚瑟‧摩根杰西·麦克雷索林·临终一役BIG BOSS希尔瓦娜斯·风行者岛田半藏岛田源氏

                          回复

                          使用道具 举报

                          咆哮诅咒敖蜃星黑暗交易阿怪GHOST吃饱金币的Doge秘密空瓶裸体克里斯【圣诞限定】心心念念小雪人【夏日限定】夏日的泰凯斯

                            回复

                            使用道具 举报

                            我的天使GM吸血伯爵吃饱金币的Doge阿拉喵?神灯和你一起飞行的皮卡丘小小舞台永浴爱河

                              回复

                              使用道具 举报

                              收到情书内森·德雷克信仰之心我已倾听,我已感受,我已思考『伊黎丝的赞词』黄金之旅金牌矿工不朽之恋

                                回复

                                使用道具 举报

                                  回复

                                  使用道具 举报

                                  缘起星空虚空之海的鲸

                                    回复

                                    使用道具 举报

                                    极·龙の意『灰域来音』阿怪纯真护剑不灭狂雷 『先知灵药:真视』泰比里厄斯永浴爱河风物长宜

                                      回复

                                      使用道具 举报

                                      小小舞台『 弗霖的琴』虚空之海的鲸業火死鬥男巫之歌泰比里厄斯【夏日限定】夏日的泰凯斯史莱姆牧场崩朽之青铜龙王岛田源氏

                                        相关内容更建议发布在CODE专区,已将帖子移动至对应版块,请楼主下次发帖前务必注意论坛规范,发布至对应版块
                                        回复

                                        使用道具 举报

                                        劫掠核芯御医神兔脉律辐石亚瑟‧摩根亚当‧简森Forever Titanic月光骑士月光骑士擎天柱(Peterbilt389)里昂‧S‧甘乃迪

                                          回复

                                          使用道具 举报

                                          您需要登录后才可以回帖 登录 | 立即注册

                                          本版积分规则

                                          文字版|手机版|小黑屋|GameMale

                                          GMT+8, 2024-12-22 10:47 , Processed in 0.150595 second(s), 146 queries , Redis On.

                                          Copyright © 2013-2024 GameMale

                                          All Rights Reserved.

                                          快速回复 返回列表