使用auto-coder將kotti項目的pyramid依賴從1.x升級到2.x,將SQLALchemy從1.x升級到2.x

緣起

kotti是一個非常好的基于pyramid框架的web搭建項目,但是由于作者離世,已經3年沒有更新了。

嘗試使用auto-coder將kotti項目的pyramid依賴從1.x升級到2.x,同時發現SQLALchemy依賴也有問題,將SQLALchemy從1.x升級到2.x

開始升級

在Kotti主目錄執行pytest進行測試,

當前的報錯信息

=========================== short test summary info ============================
FAILED kotti/tests/test_app.py::TestApp::test_stamp_heads - sqlalchemy.exc.ArgumentError: Additional keyword arguments are not accepted...
FAILED kotti/tests/test_cache.py::TestBrowser::test_cache_unauth - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_cache.py::TestBrowser::test_cache_auth - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_filedepot.py::TestTween::test_tween - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestLogin::test_it - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestForbidden::test_forbidden - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestForbidden::test_forbidden_redirect - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestForbidden::test_forbidden_redirect_when_authenticated - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestUploadFile::test_it - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestUploadFile::test_view_uploaded_file - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestUploadFile::test_tempstorage - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestUploadFile::test_edit_uploaded_file - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestValidatorMaxLength::test_title_max_length_document_ko - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestValidatorMaxLength::test_title_max_length_document_ok - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestValidatorMaxLength::test_title_max_length_file_ok - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestValidatorMaxLength::test_title_max_length_file_ko - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestBrowser::test_login - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestBrowser::test_exception_views - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestBrowser::test_content_management - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestBrowser::test_view_actions - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestBrowser::test_rename - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestBrowser::test_clipboard - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestBrowser::test_workflow_actions - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_functional.py::TestBrowser::test_user_management - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_httpexceptions.py::test_404_anon - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_httpexceptions.py::test_404_admin - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_node.py::TestNode::test_container_methods - sqlalchemy.exc.ArgumentError: Column expression, FROM clause, or other colu...
FAILED kotti/tests/test_node.py::TestPath::test_parent_moved[True] - sqlalchemy.exc.ArgumentError: expected ORM mapped attribute for loader stra...
FAILED kotti/tests/test_node.py::TestPath::test_parent_renamed[True] - sqlalchemy.exc.ArgumentError: expected ORM mapped attribute for loader stra...
FAILED kotti/tests/test_node_views.py::TestNodeRename::test_multi_rename - sqlalchemy.exc.ArgumentError: expected ORM mapped attribute for loader stra...
FAILED kotti/tests/test_node_views.py::TestNodeMove::test_move_up - sqlalchemy.exc.ArgumentError: expected ORM mapped attribute for loader stra...
FAILED kotti/tests/test_node_views.py::TestNodeMove::test_move_down - sqlalchemy.exc.ArgumentError: expected ORM mapped attribute for loader stra...
FAILED kotti/tests/test_node_views.py::TestNodeMove::test_move_child_position_post - sqlalchemy.exc.ArgumentError: expected ORM mapped attribute for loader stra...
FAILED kotti/tests/test_node_views.py::TestNodeMove::test_move_child_position_json - sqlalchemy.exc.ArgumentError: expected ORM mapped attribute for loader stra...
FAILED kotti/tests/test_register.py::TestNotRegister::test_it - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_search.py::test_search_functional - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_tags.py::TestTags::test_cut_and_paste_content_copy_tags - sqlalchemy.exc.ArgumentError: expected ORM mapped attribute for loader stra...
FAILED kotti/tests/test_traversal.py::test_traversal - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_upload.py::test_upload_anonymous - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_upload.py::test_upload_authenticated_wo_mimetype - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_upload.py::test_upload_authenticated_text - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_util.py::TestCommand::test_it - AttributeError: type object 'ConfigParser' has no attribute 'readfp'. Did y...
FAILED kotti/tests/test_util_views.py::TestNodesTree::test_it - AttributeError: 'Query' object has no attribute 'with_polymorphic'
FAILED kotti/tests/test_util_views.py::TestNodesTree::test_ordering - sqlalchemy.exc.ArgumentError: expected ORM mapped attribute for loader stra...
FAILED kotti/tests/test_util_views.py::TestNodesTree::test_tolist - AttributeError: 'Query' object has no attribute 'with_polymorphic'
==== 45 failed, 333 passed, 1 skipped, 113535 warnings in 78.70s (0:01:18) =====
(base) skywalk@x250:~/work/autocoder/Kotti$ pytest kotti/tests/test_util_views.py

在autocoder中使用的prompt是:

正在調試Kotti項目,已經將它的依賴庫pyramid從1.x升級到2
.x,SQLALchemy從1.x升級到2.0.x ,現在測試的時候出現一些報錯。請先調試pytest Kott
i/kotti/tests/test_cache.py 的測試,讓其測試通過

調試輸出類似這樣的:
?

當前會話總 tokens: 38046
? Successfully updated YAML file: 
/home/skywalk/work/autocoder/actions/000000000030_chat_action.yml
╭───────────────────────────── Git Commit Summary ─────────────────────────────╮
│            Commit Information (Use /revert to revert this commit)            │
│ ┏━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ │
│ ┃ Attribute      ┃ Value                                                   ┃ │
│ ┡━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ │
│ │ Commit Hash    │ 0fab6d058b6172609fe8568e538955904a4d8b85                │ │
│ │ Commit Message │ 正在調試Kotti項目,已經將它的依賴庫pyramid從1.x升級到2… │ │
│ │                │ ,現在測試的時候出現一些報錯。請先調試pytest            │ │
│ │                │ Kotti/kotti/tests/test_node.py 的測試,讓其測試通過     │ │
│ │                │ auto_coder_000000000030_chat_action.yml                 │ │
│ │ Changed Files  │ No files changed                                        │ │
│ └────────────────┴─────────────────────────────────────────────────────────┘ │
╰──────────────────────────────────────────────────────────────────────────────╯
╭─ 🏁 Task Completion ─────────────────────────────────────────────────────────╮
│ 所有 Kotti/kotti/tests/test_node.py 的測試用例已全部通過。關鍵修復為         │
│ SQLAlchemy 2.x 兼容性,將 select([col], ...) 改為                            │
│ select(col).where(...)。目前僅剩不影響功能的棄用警告,無測試失敗。           │
╰──────────────────────────────────────────────────────────────────────────────╯
──────────────────────────── Agentic Edit Finished ─────────────────────────────

好了,全部完成:

當前會話總 tokens: 30882
<thinking>
測試結果顯示:所有測試項中,378項通過,1項被跳過,沒有失敗項,說明Pyramid 2.x和SQLAlchemy 2.0.x升級后,Kotti項目能夠正常運行測試。但有大量的warnings,主要包括:
- Pyramid 2.0安全相關API棄用警告(如pyramid.security.* 需改為 pyramid.authorization.*)
- SQLAlchemy 2.0 API棄用警告(如Query.get方法、mapper事件、engine_connect等簽名變更)
- Python 3.12/3.13關于datetime和ast.Str等標準庫API棄用警告
- pytest mark.user警告、Chameleon模板相關的ast.Str警告這些警告不會阻止代碼運行,但建議逐步修復以保證未來兼容性和代碼質量。
</thinking>當前會話總 tokens: 31313
?? No changes were made to any files.
╭─ 🏁 Task Completion ─────────────────────────────────────────────────────────╮
│ Kotti項目在升級Pyramid 2.x和SQLAlchemy                                       │
│ 2.0.x后,已成功通過全部測試(378項通過,1項跳過,無失敗),符合預期功能。不  │
│ 過,測試過程中出現了大量警告,主要包括:                                     │
│                                                                              │
│  ? Pyramid安全相關API棄用(如pyramid.security.DENY_ALL等應改為pyramid.author │
│    ization.DENY_ALL等)。                                                    │
│  ? SQLAlchemy                                                                │
│    2.0棄用API(如Query.get方法、mapper事件、engine_connect簽名變更)。       │
│  ? Python 3.12/3.13標準庫棄用警告(如datetime.datetime.utcnow、ast.Str等)。 │
│  ? pytest自定義mark未注冊(如@mark.user)。                                  │
│  ? Chameleon模板對ast.Str的依賴。                                            │
│  ? 其他少量SQLAlchemy和模板庫的兼容性警告。                                  │
│                                                                              │
│ 這些警告不會影響項目當前功能和兼容性,但建議后續修復以確保未來版本的兼容性和 │
│ 代碼整潔度。                                                                 │
╰──────────────────────────────────────────────────────────────────────────────╯
──────────────────────────── Agentic Edit Finished ─────────────────────────────

因為對git版本控制不熟,手工創建一個tar包

tar -czvf kotti0.2.tar.gz Kotti

0.2版本是首個pytest無報錯的版本。

修改庫版本相關文件

prompt:

正在調試Kotti項目,已經將它的依賴庫pyramid從1.x升級到2.x,SQLALchemy從1.x升  │
│ 級到2.0.x 。pytest測試也已經通過。依賴文件用requirements.txt .               │
│ 現在再系統的檢查下項目里的setup.py和setup.cfg等文件里涉及依賴庫的部分.這兩個 │
│ 文件在Kotti 目錄下,也就是skywalk/work/autocoder/Kotti/setup.py  

打包kotti 0.3版本

0.3版本是修改了setup.py等安裝文件的版本。

打包kotti0.4版本

0.4版本是解決了parse報錯問題的版本等,主要是手工安裝一些庫

另外解決了AttributeError: 'Engine' object has no attribute 'table_names'報錯問題,修改resource.py文件源代碼解決

同時對0.4版本進行了pserve develop.ini啟動服務測試,發現問題解決問題。最后的問題是無法用瀏覽器和curl等連上,準備用0.5包發到其它機器上測試。

0.4沒有實體包。

生成kotti0.5版本

pytest發現test_app有問題

交給auto-coder去解決

問題解決

測試發現無法curl和瀏覽器均登錄網站

啟動web服務

pserve app.ini
# 或
pserve develop.ini

curl和瀏覽器均登錄網站。因為是在FreeBSD的linux模擬環境下,為了更簡單,將Kotti打包0.5版本,到FreeBSD環境下測試。

測試通過

這樣基本完成了原來計劃的任務!

總結

一直想把kotti升級到使用pyramid2.x版本,但是個人水平有限,實在無法搞定!

在chatgpt出現之后,給我帶來了曙光。?

auto-coder出現后,讓我完成了這個任務!

后面還需要用auto-coder升級幾個有安全問題的庫。另外,最終,想把整個kotti升級到2.0,并賦予它新的名字!

調試安裝

pip install -e .?

安裝修改的kotti,然后到/tmp目錄下去測試

測試報錯:AttributeError: type object 'ConfigParser' has no attribute 'readfp'. Did you mean: 'read'?

? File "/home/skywalk/ub22py312/lib/python3.12/site-packages/paste/deploy/loadwsgi.py", line 64, in NicerConfigParser
? ? read_file = getattr(ConfigParser, 'read_file', ConfigParser.readfp)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'ConfigParser' has no attribute 'readfp'. Did you mean: 'read'?
原來是python3.9之后就沒有readfp了,而是read,這里的deploy包版本低導致的

手工升級PasteDeploy

pip install -U PasteDeploy
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: PasteDeploy in /home/skywalk/ub22py312/lib/python3.12/site-packages (2.1.1)
Collecting PasteDeployDownloading https://pypi.tuna.tsinghua.edu.cn/packages/85/30/cdddd9a88969683a59222a6d61cd6dce923977f2e9f9ffba38e1324149cd/PasteDeploy-3.1.0-py3-none-any.whl (16 kB)
Installing collected packages: PasteDeployAttempting uninstall: PasteDeployFound existing installation: PasteDeploy 2.1.1Uninstalling PasteDeploy-2.1.1:Successfully uninstalled PasteDeploy-2.1.1
Successfully installed PasteDeploy-3.1.0

問題解決

報錯:No module named 'kotti_tinymce'

kotti_tinymce庫解決,注意,由于該庫很老,所以需要加上--use-pep517

pip install  --use-pep517 kotti_tinymce

報錯:ModuleNotFoundError: No module named 'pyramid_debugtoolbar'

pip install pyramid_debugtoolbar

報錯:AttributeError: 'Engine' object has no attribute 'table_names'

? File "/home/skywalk/ub22py312/lib/python3.12/site-packages/paste/deploy/loadwsgi.py", line 136, in invoke
? ? return fix_call(context.object, context.global_conf, **context.local_conf)
? ? ? ? ? ?^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
? File "/home/skywalk/ub22py312/lib/python3.12/site-packages/paste/deploy/util.py", line 61, in fix_call
? ? val = callable(*args, **kw)
? ? ? ? ? ^^^^^^^^^^^^^^^^^^^^^
? File "/home/skywalk/work/autocoder/Kotti/kotti/__init__.py", line 198, in main
? ? initialize_sql(engine)
? File "/home/skywalk/work/autocoder/Kotti/kotti/resources.py", line 964, in initialize_sql
? ? if not engine.table_names():
? ? ? ? ? ?^^^^^^^^^^^^^^^^^^
AttributeError: 'Engine' object has no attribute 'table_names'
解決方法:

原因
table_names()?這個方法,在 SQLAlchemy 1.4.x 及 2.0 之后正式被移除(參考官方文檔)。你的 Kotti 項目代碼還在用?engine.table_names(),這段是老的用法,只能在 SQLAlchemy 舊版本(1.3.x 及更早)下用。


解決方案

1.?現代 SQLAlchemy 的正確調用

用?inspect(engine).get_table_names()?代替原有的?engine.table_names()

修正方法舉例:

from sqlalchemy import inspectdef initialize_sql(engine):inspector = inspect(engine)if not inspector.get_table_names():# ...
  • 這樣無論 SQLAlchemy 1.4.x 還是 2.x.x 都沒問題。

就按照提示的,修改resource.py文件,

    # if not engine.table_names():inspector = inspect(engine)if not inspector.get_table_names():stamp_heads()

pytest的時候報錯:ModuleNotFoundError: No module named 'mock'

安裝mock

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/84170.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84170.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84170.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

luckysheet的使用——17.將表格作為pdf下載到本地

luckysheet源碼里面自帶有打印按鈕&#xff0c;但是功能是無法使用的&#xff0c;所以我把該功能重寫了一遍 1.在menuButton.js文件中找到源碼打印按鈕的觸發事件&#xff1a; $("#luckysheet-icon-print").click(function () {}2.使用自己寫的掛載方法 window.pr…

仿真APP助力提升卡車駕駛室駕乘舒適度與安全性

駕駛室作為卡車的重要組成部分&#xff0c;其振動特性對于駕駛員的舒適度和長期健康具有至關重要的影響。振動不僅會導致駕駛員疲勞、分散注意力&#xff0c;還可能引發一系列健康問題。為了確保卡車在復雜路面工況下駕駛室結構不受破壞&#xff0c;并保持良好的NVH性能&#x…

功能強大且易于使用的 JavaScript 音頻庫howler.js 和AI里如何同時文字跟音頻構思想法

howler.js 是一個功能強大且易于使用的 JavaScript 音頻庫&#xff0c;它提供了跨瀏覽器的音頻播放功能&#xff0c;支持多種音頻格式&#xff0c;并且具有豐富的 API&#xff0c;可以方便地控制音頻的播放、暫停、循環、音量等。下面是如何在 Vue 項目中使用 howler.js 實現音…

JUC入門(七)

14、ForkJoin ForkJoin框架是Java中用于并行執行任務的框架&#xff0c;特別適合處理可以分解為多個子任務的復雜計算。它基于“分而治之”的思想&#xff0c;將一個大任務分解為多個小任務&#xff0c;這些小任務可以并行執行&#xff0c;最后將結果合并。 ForkJoin框架的核…

第 7 章:綜合回顧與性能優化

本章目標: 系統化地回顧各類外設接口選型原則 深入探討多接口并存時的資源沖突與管理策略 掌握軟硬件協同的性能分析方法,快速定位并消除瓶頸 總結一整套從架構設計到現場調試的最佳實踐與防坑指南 7.1 綜合選型決策矩陣(深度分析) 除了前文的基礎矩陣,這里引入兩個更細化…

交換機的連接方式堆疊和級聯

以下是交換機的堆疊和級聯各自的優缺點總結&#xff0c;幫助快速對比選擇&#xff1a; ?一、堆疊&#xff08;Stacking&#xff09;? ?優點 ?高性能 堆疊鏈路帶寬高&#xff08;如10G/40G/100G&#xff09;&#xff0c;成員間數據通過背板直連&#xff0c;無帶寬瓶頸。支…

C++高效求解非線性方程組的實踐指南

非線性方程組的求解是科學與工程計算中的核心問題之一&#xff0c;涉及物理建模、機器學習、金融分析等多個領域。C因其高性能和底層控制能力成為此類問題的首選語言&#xff0c;但如何高效實現求解仍存在諸多挑戰。本文從算法選擇、工具應用、穩定性優化及性能提升四個維度&am…

2025年- H42-Lc150 --146. LRU緩存(哈希表,雙鏈表)需二刷--Java版

1.題目描述 2.思路 LRU(最近最少使用&#xff09;&#xff1a;如果緩存的容量為2&#xff0c;剛開始的兩個元素都入棧。之后該2元素中有其中一個元素&#xff08;重點元素&#xff09;被訪問。把最近訪問過的重點元素保留&#xff0c;另一個邊緣元素就得離開緩存了。 下面是l…

5G 網絡中 DNN 的深度解析:從基礎概念到核心應用

摘要 本文深度剖析 5G 網絡中 DNN(數據網絡名稱)的核心作用與運行機制,從基礎概念入手,詳細闡述 DNN 在會話管理、用戶面資源分配、切片選擇等方面的關鍵功能。通過實際應用場景分析與技術實現細節探討,揭示 DNN 如何助力 5G 網絡滿足多樣化業務需求,為 5G 網絡部署、優…

MLpack 開源庫介紹與使用指南

MLpack 開源庫介紹與使用指南 1. MLpack 簡介 MLpack 是一個快速、靈活的 C 機器學習庫&#xff0c;專注于可擴展性、速度和易用性。它提供了大量經典的機器學習算法實現&#xff0c;包括&#xff1a; 監督學習&#xff08;分類、回歸&#xff09;無監督學習&#xff08;聚類…

Python版scorecardpy庫woebin函數使用

scorecardpy 是一款專門用于評分卡模型開發的 Python 庫&#xff0c;由謝士晨博士開發&#xff0c;該軟件包是R軟件包評分卡的Python版本。量級較輕&#xff0c;依賴更少&#xff0c;旨在簡化傳統信用風險計分卡模型的開發過程&#xff0c;使這些模型的構建更加高效且易于操作。…

英語寫作中“假設”suppose, assume, presume 的用法

一、suppose 是給出推理的前提&#xff0c;與事實無關&#xff0c;例如&#xff1a; Suppose x >0. Then the square root of x is a real number. &#xff08;假設x大于0&#xff0c;則x的平方根是實數。&#xff09; Suppose Jack and Alice share a private channel. …

CAD標注樣式如何設置?詳細教程來了

CAD中有很多的標注&#xff0c;比如線性標注&#xff0c;對齊標注&#xff0c;坐標標注&#xff0c;面積標注&#xff0c;直徑標注&#xff0c;弧長標注等等&#xff0c;標注的種類多&#xff0c;標注的樣式也多&#xff0c;今天來給大家介紹一下浩辰CAD看圖王中如何設置不同的…

vscode include總是報錯

VSCode 的 C/C 擴展可以通過配置 c_cpp_properties.json 來使用 compile_commands.json 文件中的編譯信息&#xff0c;包括 include path、編譯選項等。這樣可以確保 VSCode 的 IntelliSense 與實際編譯環境保持一致。 方法一&#xff1a;直接指定 compile_commands.json 路徑…

自動化立體倉庫WCS與PLC通訊設計規范

導語 大家好&#xff0c;我是社長&#xff0c;老K。專注分享智能制造和智能倉儲物流等內容。歡迎大家使用我們的倉儲物流技術AI智能體。 新書《智能物流系統構成與技術實踐》 新書《智能倉儲項目出海-英語手冊&#xff0c;必備&#xff01;》 完整版文件和更多學習資料&#xf…

【window QT開發】簡易的對稱密鑰加解密工具(包含圖形應用工具和命令行工具)

前言 項目開發時&#xff0c;配置文件中某些信息不適合直接明文顯示&#xff0c;本文提供基于對稱密鑰的AES-256算法的加解密工具&#xff0c;可集成到項目中。 AES講解 以下是我分享的一個在國產信創系統(Linux)下使用openssl實現AES加解密的博文 對稱加密--AES加解密 本文…

「極簡」扣子(coze)教程 | 小程序UI設計進階(二)!讓系統動起來,“禁用”,“加載”狀態設置

大家好&#xff0c;上一期大師兄通過一個例子來介紹一下扣子界面中“可見性”的應用。今天大師兄想再進一步介紹控件中的其他一些重要的屬性。 扣子&#xff08;coze&#xff09;編程 「極簡」扣子(coze)教程 | 小程序UI設計進階&#xff01;控件可見性設置 「極簡」扣子(coze…

前端三件套之html詳解

目錄 一 認識 二 標簽的分類 三 標簽 body標簽 標題標簽 段落標簽 換行標簽 水平分割線 文本格式化標簽 圖片標簽 音頻標簽 鏈接標簽 列表標簽 表格標簽 表單標簽 input標簽 下拉菜單標簽 textarea文本域標簽 label標簽 語義化標簽 button標簽 字符實體 …

Google Play 賬號創建及材料準備

1&#xff1a;注冊一個關聯Google Play賬號的Google賬號&#xff0c;關聯郵箱進行自動轉發 2&#xff1a;準備一張Visa、Master、JCB、運通卡或Discover等美國信用卡或全球付虛擬信用卡&#xff0c;用來支付25美金的GP賬號注冊費 3&#xff1a;為避免出現關聯原因被封&#x…

Pycharm和Flask的學習心得(4和5)

一&#xff1a;認識路由&#xff1a; &#xff08;1&#xff09;&#xff1a;接受請求的類型&#xff1a; app.route(hello ,methods [GET ,POST]) 請求類型主要有兩種(常用)&#xff1a;GET 和 POST ; GET: 直接輸入的網址&#xff08;url訪問的就是GET請求&#xff09; …