GameMale
登陆 / 注册 搜索

USERCENTER

SEARCHSITE

搜索

查看: 808|回复: 31
收起左侧

[实用工具] 基于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暮狼归来超人巴基

      回复

      使用道具 举报

      莱因哈特·威尔海姆克莱夫・罗兹菲尔德亚索『流星赶月』肥皂守护者三角头逆转未来卢西亚诺‧科斯塔Dante

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

        使用道具 举报

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

          回复

          使用道具 举报

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

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

            使用道具 举报

            官复原职实现梦想吃饱金币的Doge和你一起飞行的皮卡丘崩朽之青铜龙王虚空之海的鲸永远的克叔『召唤好运的角笛』『流星赶月:宙刃』重建熊屋

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

              使用道具 举报

              石肤术炼金之心灵光补脑剂禽兽扒手结晶火鹰幼崽『正在入住GM村』卡勒罗斯辉石头罩幽浮起司煲瓮中能言蛙赫敏·格兰杰

                回复

                使用道具 举报

                风物长宜炙热的格拉迪欧拉斯晓月终焉奧倫GM論壇榮譽勛章威克多尔·克鲁姆赫敏·格兰杰亚力斯塔尔牧羊人小小舞台

                  讨论一下啊


                  看了一下代码,其实如果只是本地的话,不需要去解决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>
                  复制代码




                  回复

                  使用道具 举报

                  至情至性希尔瓦娜斯·风行者猎户座的明珠黑暗消融遍江云霞我的冶金打火机威克多尔·克鲁姆吃饱金币的Doge阿尔萨斯‧米奈希尔

                    回复

                    使用道具 举报

                    特殊-家园卫士Ⓡ眼镜蛇图腾猎鹰图腾山猫图腾森林羊男质量效应三部曲驯化红龙幼崽特殊-家园卫士Ⓛ小凤凰【新手友好】昆進

                      回复

                      使用道具 举报

                      男巫之歌SCP-s-1889-第五页信仰之心不灭狂雷神奇四叶草情难自抑泰比里厄斯落雪勇者与龙的传说-第一页诺克提斯·路西斯·伽拉姆缘起星空

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

                        使用道具 举报

                        The king杰西·麦克雷索林·临终一役希尔瓦娜斯·风行者岛田半藏岛田源氏

                          回复

                          使用道具 举报

                          幽灵竹筒龙鳞石宝箱内的球【夏日限定】夏日的泰凯斯雪王的心脏杰西·麦克雷肥皂喜欢金币的Doge结晶火鹰幼崽赫敏·格兰杰

                            回复

                            使用道具 举报

                            我的天使阿拉喵?神灯

                              回复

                              使用道具 举报

                              重归于好神奇四叶草猩红恐惧『流星赶月』英雄联盟

                                回复

                                使用道具 举报

                                炼金之心『住在GM村』神秘商店贵宾卡黑暗交易

                                  回复

                                  使用道具 举报

                                  缘起星空虚空之海的鲸

                                    回复

                                    使用道具 举报

                                    丛林的鸟飞走了伪造的红石幽灵竹筒破损的旧书冒险用指南针雪王的心脏小小舞台不灭的蓝宝石永浴爱河泰比里厄斯

                                      回复

                                      使用道具 举报

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

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

                                        使用道具 举报

                                        赛博朋克2077森林羊男GM論壇勛章捡到了肥皂可疑的红石堕落之舞戴蒙‧萨尔瓦托琉璃玉坠蒂法·洛克哈特黑龙幼崽

                                          回复

                                          使用道具 举报

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

                                          本版积分规则

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

                                          GMT+8, 2024-5-5 03:43 , Processed in 0.133722 second(s), 143 queries , Redis On.

                                          Copyright © 2013-2024 GameMale

                                          All Rights Reserved.

                                          快速回复 返回列表