中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

wordpress圖片網(wǎng)站網(wǎng)站要怎么創(chuàng)建

wordpress圖片網(wǎng)站,網(wǎng)站要怎么創(chuàng)建,4500急招一位接送小孩阿姨附近,淘寶客網(wǎng)站靜態(tài)還是動態(tài)好文章目錄 dash2.18.1 純Python的Web應(yīng)用框架Python Dash庫的功能介紹和用法示例功能介紹用法示例 Flask-Compress1.15 Flask響應(yīng)數(shù)據(jù)的壓縮功能介紹用法示例注意事項 feffery-antd-charts0.1.0rc5 數(shù)據(jù)可視化組件庫功能介紹用法示例 feffery-antd-components0.3.8 Dash 第三方組…

文章目錄

dash==2.18.1 純Python的Web應(yīng)用框架

Python Dash庫的功能介紹和用法示例

功能介紹

Python中的Dash庫是一個強大的Web應(yīng)用框架,主要用于創(chuàng)建交互式數(shù)據(jù)可視化界面和數(shù)據(jù)分析型Web應(yīng)用。它由Plotly團隊開發(fā),集成了Plotly.js圖表庫,支持多種圖表類型如折線圖、柱狀圖、散點圖、地圖等,并允許用戶通過簡單的Python代碼定義應(yīng)用的行為和界面布局。Dash的主要功能包括:

  1. 快速構(gòu)建交互式Web應(yīng)用
  • Dash使用Python語法,對于熟悉Python的用戶來說很容易上手。
  • 提供了豐富的UI組件,如文本框、按鈕、下拉菜單、滑塊等,方便構(gòu)建用戶界面。
  • 支持用戶交互,如點擊事件、下拉列表選擇等,能夠?qū)崟r更新數(shù)據(jù)和圖表。
  1. 支持多種數(shù)據(jù)可視化圖表
  • Dash集成了Plotly.js,可以直接生成支持縮放、平移和導出為圖片等功能的圖表。
  • 提供了超過50種圖表類型,包括地圖、熱力圖、三維圖表等,滿足不同的數(shù)據(jù)可視化需求。
  1. 服務(wù)器端渲染與響應(yīng)式設(shè)計
  • Dash應(yīng)用程序在服務(wù)器端渲染,然后將結(jié)果發(fā)送到客戶端瀏覽器。
  • 提供了對移動設(shè)備友好的布局,支持響應(yīng)式設(shè)計,確保應(yīng)用在不同設(shè)備上都能良好顯示。
  1. 易于擴展與集成
  • Dash可以與Pandas等數(shù)據(jù)處理庫集成,方便處理和展示各種數(shù)據(jù),如CSV、Excel等。
  • 支持將Dash應(yīng)用無縫嵌入現(xiàn)有網(wǎng)站,或?qū)ash集成到現(xiàn)有的Flask應(yīng)用程序中,實現(xiàn)更復(fù)雜的功能組合。
  1. 高級功能與企業(yè)級支持
  • Dash企業(yè)版提供了更多功能和支持,如應(yīng)用管理器、Kubernetes擴展、無代碼認證、作業(yè)隊列等,適合在部門或公司范圍內(nèi)部署Dash應(yīng)用。
  • 提供了設(shè)計工具包、快照引擎、儀表板工具包等高級功能,幫助用戶快速構(gòu)建高質(zhì)量的數(shù)據(jù)應(yīng)用。

用法示例

以下是一個簡單的Dash應(yīng)用示例,它展示了一個包含標題和折線圖的Web頁面:

  1. 安裝Dash

    你可以使用pip來安裝Dash庫:

    pip install dash
    

    由于Dash應(yīng)用通常會用到Plotly來繪制圖表,因此Plotly也會被自動安裝。

  2. 創(chuàng)建Dash應(yīng)用

    下面是一個完整的示例代碼,用于創(chuàng)建一個簡單的Dash應(yīng)用:

    import dash  
    import dash_core_components as dcc  
    import dash_html_components as html  
    from dash.dependencies import Input, Output  
    import plotly.graph_objs as go  # 創(chuàng)建Dash應(yīng)用實例  
    app = dash.Dash(__name__)  # 設(shè)置應(yīng)用布局  
    app.layout = html.Div(children=[  html.H1(children='Dash應(yīng)用示例'),  html.Div(children='''  這是一個簡單的Dash應(yīng)用,它包含一個折線圖。  '''),  dcc.Graph(  id='example-graph',  figure={  'data': [  go.Scatter(  x=[1, 2, 3, 4, 5],  y=[10, 11, 12, 13, 14],  mode='lines',  marker={  'size': 10,  },  )  ],  'layout': go.Layout(  title='折線圖示例',  xaxis={'title': 'X軸'},  yaxis={'title': 'Y軸'},  )  }  )  
    ])  # 如果需要添加回調(diào)函數(shù)來處理用戶交互,可以在這里定義  
    # 例如,根據(jù)用戶輸入更新圖表  
    # @app.callback(  
    #     Output('example-graph', 'figure'),  
    #     [Input('some-input-id', 'value')]  
    # )  
    # def update_graph(input_value):  
    #     # 根據(jù)input_value更新圖表數(shù)據(jù)并返回  
    #     pass  # 運行應(yīng)用  
    if __name__ == '__main__':  app.run_server(debug=True)
    
  3. 運行Dash應(yīng)用

    將上述代碼保存為一個Python文件(例如app.py),然后在命令行中運行該文件:

    python app.py
    

    Dash應(yīng)用將在本地服務(wù)器上啟動,并默認在瀏覽器中打開http://127.0.0.1:8050/。你將看到一個包含標題和折線圖的簡單Web頁面。

通過以上介紹和示例代碼,你可以了解到Dash庫的基本功能和用法。Dash以其強大的數(shù)據(jù)可視化能力和易于擴展的Web應(yīng)用框架特性,成為數(shù)據(jù)科學和機器學習領(lǐng)域構(gòu)建Web應(yīng)用的首選工具之一。

Flask-Compress==1.15 Flask響應(yīng)數(shù)據(jù)的壓縮

Flask-Compress是一個專為Flask應(yīng)用設(shè)計的擴展,旨在簡化響應(yīng)數(shù)據(jù)的壓縮過程,以提高Web應(yīng)用的性能。以下是對Flask-Compress庫的功能介紹和用法示例:

功能介紹

  1. 壓縮響應(yīng)數(shù)據(jù)
  • Flask-Compress能夠自動檢查請求的Accept-Encoding頭信息,確定客戶端支持的壓縮算法(如gzip、deflate和brotli),并根據(jù)配置選擇合適的壓縮方式對響應(yīng)數(shù)據(jù)進行壓縮。
  • 這顯著減少了傳輸數(shù)據(jù)量,加快了頁面加載速度,特別是在帶寬有限的情況下。
  1. 自動處理HTTP頭信息
  • Flask-Compress能夠自動處理壓縮響應(yīng)所需的HTTP頭信息,如Content-Encoding和Vary頭,使得開發(fā)者無需手動干預(yù)即可享受壓縮帶來的性能提升。
  1. 靈活的配置選項
  • Flask-Compress提供了多個配置選項,允許開發(fā)者自定義壓縮行為。例如,可以設(shè)置壓縮級別、指定需要壓縮的MIME類型、在調(diào)試模式下是否啟用壓縮等。
  1. 全局和按視圖壓縮
  • Flask-Compress不僅支持全局壓縮,還提供了按視圖壓縮的功能。開發(fā)者可以根據(jù)具體需求靈活配置,以優(yōu)化不同視圖或路由的響應(yīng)數(shù)據(jù)。
  1. 易于集成和緩存友好
  • Flask-Compress易于集成到現(xiàn)有的Flask應(yīng)用中,只需幾行代碼即可實現(xiàn)。此外,它還支持與緩存機制集成,直接從緩存中提供壓縮后的響應(yīng)數(shù)據(jù),進一步減少服務(wù)器負載和響應(yīng)時間。

用法示例

以下是一個簡單的Flask應(yīng)用示例,展示了如何使用Flask-Compress來壓縮響應(yīng)數(shù)據(jù):

from flask import Flask, jsonify  
from flask_compress import Compress  # 創(chuàng)建Flask應(yīng)用實例  
app = Flask(__name__)  # 初始化Flask-Compress  
compress = Compress()  
compress.init_app(app)  # 配置壓縮選項(可選)  
app.config['COMPRESS_LEVEL'] = 6  # 設(shè)置壓縮級別,默認為6(在1到9之間)  
app.config['COMPRESS_MIMETYPES'] = ['text/html', 'text/xml', 'text/plain', 'text/css', 'text/javascript', 'application/javascript', 'application/x-javascript', 'application/json']  # 指定需要壓縮的MIME類型  
app.config['COMPRESS_DEBUG'] = False  # 在調(diào)試模式下是否啟用壓縮,默認為False  # 路由示例  
@app.route('/json')  
def get_json_data():  data = {'name': '小明', 'age': 14}  lst = [data] * 1000  # 生成一個較大的JSON數(shù)據(jù)  return jsonify(lst)  # 運行Flask應(yīng)用  
if __name__ == '__main__':  app.run()

在這個示例中,Flask-Compress會自動壓縮/json路由返回的JSON數(shù)據(jù)。當Flask應(yīng)用處理請求并返回響應(yīng)時,Flask-Compress會檢查響應(yīng)的內(nèi)容類型,并嘗試對其進行壓縮(如果可能的話)。

注意事項

  • 在使用Flask-Compress時,請確保客戶端(如瀏覽器)支持相應(yīng)的壓縮算法。
  • 壓縮會增加CPU使用率,因為需要在發(fā)送響應(yīng)之前對數(shù)據(jù)進行壓縮。因此,在CPU資源有限的環(huán)境中,請仔細評估壓縮的利弊。
  • Flask-Compress默認不會對靜態(tài)文件進行壓縮。如果需要壓縮靜態(tài)文件(如CSS、JavaScript文件),可能需要使用Web服務(wù)器(如Nginx)或CDN提供的壓縮功能。

總之,Flask-Compress是一個強大的Flask擴展,能夠顯著提升應(yīng)用的性能。通過簡單的配置和集成,開發(fā)者可以輕松地在Flask應(yīng)用中啟用響應(yīng)數(shù)據(jù)壓縮功能。

feffery-antd-charts==0.1.0rc5 數(shù)據(jù)可視化組件庫

功能介紹

feffery-antd-charts 是一個由國內(nèi)DASH第一人Feffery(費老師)基于 Ant Design 和 ECharts 的 Python Web 開發(fā)庫中的數(shù)據(jù)可視化組件庫。它專為 Dash 應(yīng)用設(shè)計,將 Ant Design 的美觀性和 ECharts 的強大數(shù)據(jù)可視化功能相結(jié)合,為開發(fā)者提供了豐富的圖表組件。通過使用 feffery-antd-charts,開發(fā)者可以輕松地在 Dash 應(yīng)用中集成各種美觀且功能強大的圖表,從而創(chuàng)建出具有吸引力的交互式數(shù)據(jù)可視化界面。

feffery-antd-charts 庫的主要功能包括:

  1. 豐富的圖表類型:提供了多種類型的圖表,如折線圖、柱狀圖、餅圖、散點圖、地圖等,滿足不同場景下的數(shù)據(jù)可視化需求。
  2. 美觀的 UI 設(shè)計:基于 Ant Design 的 UI 組件庫,確保了圖表的美觀性和一致性。
  3. 易于使用:通過 Python 代碼即可輕松配置和自定義圖表,降低了開發(fā)門檻。
  4. 交互式體驗:支持用戶交互,如縮放、平移、點擊等,提升了數(shù)據(jù)可視化的交互性和用戶體驗。
  5. 與 Dash 深度集成:作為 Dash 的第三方組件庫,與 Dash 框架緊密結(jié)合,方便在 Dash 應(yīng)用中使用。

用法示例

以下是一個使用 feffery-antd-charts 在 Dash 應(yīng)用中創(chuàng)建折線圖的示例代碼:

import dash  
from dash import dcc, html  
import feffery_antd_charts as fac  # 創(chuàng)建 Dash 應(yīng)用實例  
app = dash.Dash(__name__)  # 準備數(shù)據(jù)  
data = [  {"date": "2023-10-01", "value": 10},  {"date": "2023-10-02", "value": 15},  {"date": "2023-10-03", "value": 13},  {"date": "2023-10-04", "value": 17},  {"date": "2023-10-05", "value": 16},  
]  # 配置圖表  
line_chart = fac.AntdLine(  linestyle_opts=opts.LineStyleOpts(color="#1890ff"),  label_opts=opts.LabelOpts(is_show=False),  xaxis_data=[item["date"] for item in data],  yaxis_data=[item["value"] for item in data],  title="折線圖示例",  tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),  
)  # 設(shè)置應(yīng)用布局  
app.layout = html.Div(  [  html.H1("feffery-antd-charts 示例"),  dcc.Graph(figure=line_chart.get_figure()),  ]  
)  # 運行應(yīng)用  
if __name__ == "__main__":  app.run_server(debug=True)

注意

  • 在上述代碼中,opts 是 ECharts 的配置項,但在 feffery-antd-charts 的高級用法中,通常會通過 fac 提供的接口來配置圖表,而不是直接使用 opts。上述示例為了簡潔起見,直接使用了 opts,但在實際使用中,請查閱 feffery-antd-charts 的官方文檔以獲取正確的配置方式。
  • 由于 feffery-antd-charts 是基于 Dash 的第三方組件庫,因此需要先安裝 Dash 和 feffery-antd-charts 才能運行上述代碼。你可以使用 pip 命令來安裝它們:pip install dash feffery-antd-charts。
  • 示例代碼中的 AntdLinefeffery-antd-charts 提供的折線圖組件,你可以根據(jù)需要選擇其他類型的圖表組件,如 AntdBar(柱狀圖)、AntdPie(餅圖)等。

通過 feffery-antd-charts,你可以輕松地在 Dash 應(yīng)用中集成各種美觀且功能強大的圖表,從而創(chuàng)建出具有吸引力的交互式數(shù)據(jù)可視化界面。

feffery-antd-components==0.3.8 Dash 第三方組件庫

功能介紹

feffery-antd-components(簡稱 fac)是一個基于 Ant Design 的 Dash 第三方組件庫,由 Feffery 老師開源維護。它提供了豐富的頁面常用交互組件功能,使開發(fā)者可以使用純 Python 的方式快速構(gòu)建現(xiàn)代化的交互式 Web 應(yīng)用。fac 組件底層與 Dash 框架緊密結(jié)合,涵蓋了通用、布局、導航、數(shù)據(jù)錄入、數(shù)據(jù)展示、反饋等七大類功能,擁有多達上百個組件,滿足了各種常用應(yīng)用功能需求。

feffery-antd-components 的主要特點包括:

  1. 豐富的組件類型:提供了超過 100 個組件,滿足不同開發(fā)需求。
  2. 簡潔的 Python 接口:降低了學習成本,使得開發(fā)者能夠更快速地上手使用。
  3. 遵循 Ant Design 設(shè)計規(guī)范:組件具有統(tǒng)一的視覺風格和一致化的交互方式,提高了應(yīng)用程序的可讀性和整體質(zhì)量。
  4. 支持多語言:可設(shè)置不同的語言環(huán)境,滿足不同地域和用戶的語言需求。
  5. 支持靜態(tài)資源通過 CDN 加載:加速了應(yīng)用訪問速度,提升了用戶體驗。
  6. 減少應(yīng)用初始加載時間:按需加載資源,優(yōu)化了應(yīng)用的性能。
  7. 利用批量屬性監(jiān)聽:提升了回調(diào)函數(shù)編排效率,簡化了代碼結(jié)構(gòu)。

用法示例

以下是一個使用 feffery-antd-components 在 Dash 應(yīng)用中創(chuàng)建簡單布局的示例代碼:

import dash  
from dash import html  
import feffery_antd_components as fac  # 創(chuàng)建 Dash 應(yīng)用實例  
app = dash.Dash(__name__)  # 設(shè)置應(yīng)用布局  
app.layout = html.Div(  [  # 創(chuàng)建一個標題組件  fac.AntdTitle('您好! Dash', level=2),  # 創(chuàng)建一條分割線組件  fac.AntdDivider(lineColor='red', isDashed=True),  # 創(chuàng)建一個文本組件,顯示 Dash 版本信息  fac.AntdText('Dash 版本: %s' % dash.__version__, underline=True),  # 再次創(chuàng)建分割線組件,設(shè)置不同樣式  fac.AntdDivider('分割線', lineColor='#6EAA82', isDashed=True, fontColor='#4F78B0', fontStyle='italic'),  # 創(chuàng)建一個按鈕組件  fac.AntdButton('點擊我', type='primary', on_click=lambda: print('按鈕被點擊了!')),  # 創(chuàng)建一個輸入框組件  fac.InputNumber(id='input-number', value=10, min=0, max=100, step=1),  # 創(chuàng)建一個表格組件,并設(shè)置一些示例數(shù)據(jù)  fac.AntdTable(  columns=[  {'title': '名稱', 'dataIndex': 'name', 'key': 'name'},  {'title': '年齡', 'dataIndex': 'age', 'key': 'age'},  {'title': '地址', 'dataIndex': 'address', 'key': 'address'},  ],  dataSource=[  {'key': '1', 'name': '張三', 'age': 32, 'address': '北京'},  {'key': '2', 'name': '李四', 'age': 42, 'address': '上海'},  {'key': '3', 'name': '王五', 'age': 28, 'address': '廣州'},  ],  ),  ]  
)  # 運行應(yīng)用  
if __name__ == "__main__":  app.run_server(debug=True)

說明

  1. 在上述代碼中,我們首先導入了 Dash 框架和 feffery-antd-components 庫。
  2. 然后,我們創(chuàng)建了一個 Dash 應(yīng)用實例,并設(shè)置了應(yīng)用布局。
  3. 在布局中,我們使用了多個 feffery-antd-components 提供的組件,如 AntdTitle(標題組件)、AntdDivider(分割線組件)、AntdText(文本組件)、AntdButton(按鈕組件)、InputNumber(輸入框組件)和 AntdTable(表格組件)等。
  4. 每個組件都通過相應(yīng)的屬性進行了配置,如標題級別、分割線顏色、文本內(nèi)容、按鈕點擊事件、輸入框的值和范圍等。
  5. 最后,我們運行了 Dash 應(yīng)用,并通過瀏覽器訪問了應(yīng)用界面,查看了各個組件的顯示效果和交互功能。

通過 feffery-antd-components,開發(fā)者可以輕松地構(gòu)建出具有美觀界面和豐富交互功能的 Web 應(yīng)用。

feffery-markdown-components==0.2.10 Markdown 組件庫

功能介紹

feffery-markdown-components 是一個用于 Dash 應(yīng)用的 Markdown 組件庫,它使得開發(fā)者能夠在 Dash 應(yīng)用中輕松地集成和渲染 Markdown 內(nèi)容。該庫提供了豐富的 Markdown 渲染功能,并支持自定義樣式,從而滿足開發(fā)者對于文檔展示、內(nèi)容編輯等場景的需求。

feffery-markdown-components 的主要特點包括:

  1. Markdown 渲染:支持標準的 Markdown 語法,包括標題、段落、列表、代碼塊、鏈接、圖片等。
  2. 自定義樣式:通過參數(shù)配置,可以自定義 Markdown 內(nèi)容的 CSS 樣式,包括代碼塊容器及代碼文字內(nèi)容的樣式。
  3. 易于集成:作為 Dash 的第三方組件庫,feffery-markdown-components 與 Dash 框架緊密結(jié)合,方便在 Dash 應(yīng)用中使用。
  4. 豐富的擴展功能:除了基本的 Markdown 渲染外,還支持其他擴展功能,如代碼高亮、目錄生成等(具體擴展功能需參考官方文檔)。

用法示例

以下是一個使用 feffery-markdown-components 在 Dash 應(yīng)用中渲染 Markdown 內(nèi)容的示例代碼:

import dash  
from dash import html  
import feffery_markdown_components as fmc  # 創(chuàng)建 Dash 應(yīng)用實例  
app = dash.Dash(__name__)  # 準備 Markdown 內(nèi)容  
raw_markdown = '''  
# 這是一個標題  這是一個段落。Markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文本格式編寫文檔。  ## 列表  - 無序列表項 1  
- 無序列表項 2  
- 無序列表項 3  1. 有序列表項 1  
2. 有序列表項 2  
3. 有序列表項 3  '''# 設(shè)置應(yīng)用布局app.layout = html.Div([\# 使用 fmc.FefferyMarkdown 組件渲染 Markdown 內(nèi)容fmc.FefferyMarkdown(markdownStr=raw_markdown,\# 可選:自定義代碼塊容器的 CSS 樣式codeBlockStyle={'backgroundColor': '#f5f5f5','padding': '10px','borderRadius': '5px','overflowX': 'auto'},\# 可選:自定義代碼文字內(nèi)容的 CSS 樣式codeStyle={'color': '#333','fontSize': '14px','fontFamily': 'monospace'})]
)# 運行應(yīng)用if **name** == "**main**":
app.run_server(debug=True)

說明

  1. 在上述代碼中,我們首先導入了 Dash 框架和 feffery-markdown-components 庫。
  2. 然后,我們創(chuàng)建了一個 Dash 應(yīng)用實例,并準備了要渲染的 Markdown 內(nèi)容。
  3. 在應(yīng)用布局中,我們使用了 fmc.FefferyMarkdown 組件來渲染 Markdown 內(nèi)容,并通過 markdownStr 參數(shù)傳入了 Markdown 字符串。
  4. 此外,我們還通過 codeBlockStylecodeStyle 參數(shù)自定義了代碼塊容器和代碼文字內(nèi)容的 CSS 樣式。
  5. 最后,我們運行了 Dash 應(yīng)用,并通過瀏覽器訪問了應(yīng)用界面,查看了 Markdown 內(nèi)容的渲染效果。

通過 feffery-markdown-components,開發(fā)者可以輕松地在 Dash 應(yīng)用中集成和渲染 Markdown 內(nèi)容,并根據(jù)需要進行樣式自定義。

feffery-utils-components==0.2.0rc24 Dash開發(fā)百寶箱

功能介紹

feffery-utils-components 是一個實用的 Python 網(wǎng)頁開發(fā)工具庫,專為 Dash 應(yīng)用設(shè)計。它提供了一系列便捷的組件和工具函數(shù),旨在幫助開發(fā)者更高效地構(gòu)建現(xiàn)代化的交互式 Web 應(yīng)用。這些組件和工具函數(shù)涵蓋了多種常見應(yīng)用功能需求,如尺寸調(diào)整、顏色選擇、文件上傳與下載等。

feffery-utils-components 的主要特點包括:

  1. 豐富的組件類型:提供了多種實用的網(wǎng)頁組件,如尺寸調(diào)整組件、顏色選擇器組件等。
  2. 便捷的工具函數(shù):包含了一系列幫助開發(fā)者加速開發(fā)工作的工具函數(shù)。
  3. 易于集成:作為 Dash 的第三方組件庫,feffery-utils-components 與 Dash 框架緊密結(jié)合,方便在 Dash 應(yīng)用中使用。
  4. 可定制性強:組件和工具函數(shù)均支持自定義配置,滿足開發(fā)者對于不同應(yīng)用場景的需求。

用法示例

以下是一個使用 feffery-utils-components 中的 FefferyResizable 組件在 Dash 應(yīng)用中實現(xiàn)尺寸可調(diào)整容器的示例代碼:

import dash  
from dash import html  
import feffery_utils_components as fuc  # 創(chuàng)建 Dash 應(yīng)用實例  
app = dash.Dash(__name__)  # 準備應(yīng)用布局  
app.layout = html.Div(  [  # 使用 fuc.FefferyResizable 組件實現(xiàn)尺寸可調(diào)整的容器  fuc.FefferyResizable(  # 要調(diào)整的容器內(nèi)容,可以是任意 Dash 組件  fuc.FefferyDiv(  html.P("這是一個可以調(diào)整尺寸的容器!"),  style={  'backgroundColor': '#f0f0f0',  'padding': '20px',  'border': '1px solid #ccc'  }  ),  # 可選:設(shè)置容器的初始尺寸  defaultSize={'width': 300, 'height': 200},  # 可選:設(shè)置尺寸調(diào)整的方向,'both' 表示可以同時在水平和垂直方向調(diào)整  direction=['both'],  # 可選:設(shè)置尺寸調(diào)整手柄的樣式  resizeHandleStyle={  'width': '10px',  'backgroundColor': '#333',  'cursor': 'se-resize'  }  )  ]  
)  # 運行應(yīng)用  
if __name__ == "__main__":  app.run_server(debug=True)

說明

  1. 在上述代碼中,我們首先導入了 Dash 框架和 feffery-utils-components 庫。
  2. 然后,我們創(chuàng)建了一個 Dash 應(yīng)用實例,并準備了應(yīng)用布局。
  3. 在應(yīng)用布局中,我們使用了 fuc.FefferyResizable 組件來實現(xiàn)一個尺寸可調(diào)整的容器。該組件接受一個子組件作為要調(diào)整的容器內(nèi)容,并提供了 defaultSizedirectionresizeHandleStyle 等參數(shù)來配置容器的初始尺寸、尺寸調(diào)整方向和尺寸調(diào)整手柄的樣式。
  4. 最后,我們運行了 Dash 應(yīng)用,并通過瀏覽器訪問了應(yīng)用界面,查看了尺寸可調(diào)整容器的效果。

通過 feffery-utils-components,開發(fā)者可以更加便捷地構(gòu)建現(xiàn)代化的交互式 Web 應(yīng)用,并根據(jù)需要進行自定義配置和擴展。

fastapi[all]==0.115.0 Web框架

Python中的FastAPI庫是一個現(xiàn)代、快速且高性能的Web框架,專注于構(gòu)建API。以下是FastAPI庫的主要功能和用法示例:

功能介紹

高性能與異步支持:
FastAPI基于ASGI(Asynchronous Server Gateway Interface)協(xié)議,支持異步編程,能夠高效處理大量并發(fā)請求。
利用Python的異步特性,FastAPI提供了卓越的性能和并發(fā)處理能力。
自動生成文檔:
FastAPI內(nèi)置了Swagger UI和ReDoc等交互式的API文檔生成工具。
開發(fā)者無需額外配置,即可自動生成詳細的API文檔,方便調(diào)試和分享。
數(shù)據(jù)驗證與類型檢查:
FastAPI利用Python的類型提示和Pydantic庫進行數(shù)據(jù)驗證和類型檢查。
開發(fā)者可以定義數(shù)據(jù)模型,確保輸入數(shù)據(jù)的格式和類型正確無誤。
快速開發(fā)與易用性:
FastAPI提供了簡潔明了的API設(shè)計方式,結(jié)合聲明式的路由定義和自動路由解析,提高了開發(fā)效率。
開發(fā)者可以快速上手并編寫出清晰、可讀性強的代碼。
高度可擴展性與兼容性:
FastAPI支持多種數(shù)據(jù)庫和中間件,可以輕松地與其他第三方庫集成。
開發(fā)者可以根據(jù)項目的具體需求選擇合適的組件和服務(wù),實現(xiàn)高度定制化的開發(fā)。

用法示例

安裝FastAPI和Uvicorn:

pip install fastapi uvicorn

創(chuàng)建一個簡單的FastAPI應(yīng)用:

from fastapi import FastAPI  app = FastAPI()  @app.get("/")  
async def read_root():  return {"Hello": "World"}

運行應(yīng)用:
使用Uvicorn運行FastAPI應(yīng)用:

uvicorn main:app --reload

其中,main是Python文件名(去掉.py后綴),app是FastAPI實例的名稱。–reload選項用于在代碼更新時自動重啟服務(wù)器,非常適合開發(fā)階段使用。

訪問API:
打開瀏覽器并訪問http://127.0.0.1:8000/,應(yīng)該能夠看到以下JSON響應(yīng):

{"Hello": "World"}

自動生成文檔:
訪問以下地址可以查看自動生成的API文檔:
Swagger UI: http://127.0.0.1:8000/docs
ReDoc: http://127.0.0.1:8000/redoc
處理路徑參數(shù)和查詢參數(shù):

@app.get("/items/{item_id}")  
async def read_item(item_id: int, q: str = None):  return {"item_id": item_id, "q": q}

訪問http://127.0.0.1:8000/items/5,返回:

{"item_id": 5}

訪問http://127.0.0.1:8000/items/?q=fastapi,返回:

{"q": "fastapi"}

處理請求體和響應(yīng)模型:

from pydantic import BaseModel  
from fastapi import HTTPException  class Item(BaseModel):  name: str  price: float  is_offer: bool = None  @app.post("/items/")  
async def create_item(item: Item):  return item

發(fā)送一個POST請求到http://127.0.0.1:8000/items/,請求體示例:

{"name": "Item Name", "price": 99.99, "is_offer": true}

返回結(jié)果將是:

{"name": "Item Name", "price": 99.99, "is_offer": true}

處理異常:

@app.get("/items/{item_id}")  
async def read_item(item_id: int):  if item_id < 0:  raise HTTPException(status_code=400, detail="Item ID must be positive")  return {"item_id": item_id}

如果傳遞負值,將返回400錯誤:

{"detail": "Item ID must be positive"}

添加中間件:

from fastapi.middleware.cors import CORSMiddleware  app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"])

部署FastAPI應(yīng)用:
可以使用ASGI服務(wù)器(例如Uvicorn或Gunicorn)來運行和部署FastAPI應(yīng)用。
以上示例展示了FastAPI的基本用法和高級特性,開發(fā)者可以根據(jù)這些示例快速上手并構(gòu)建自己的API服務(wù)。同時,FastAPI擁有豐富的文檔和社區(qū)支持,開發(fā)者可以查閱官方文檔或參與社區(qū)討論以獲取更多幫助。

pydantic-validation-decorator==0.1.2 數(shù)據(jù)驗證庫

功能介紹

Pydantic 是一個用于 Python 的數(shù)據(jù)驗證庫,它利用 Python 的類型注解系統(tǒng),可以高效且準確地驗證和清理傳入應(yīng)用程序的數(shù)據(jù)。Pydantic 提供了強類型模式驗證,能夠確保數(shù)據(jù)結(jié)構(gòu)一致性和安全性。不過,需要注意的是,“pydantic-validation-decorator”并非一個官方或廣泛認知的庫名,可能是對 Pydantic 庫中驗證裝飾器(validator decorator)功能的特指或誤解。在 Pydantic 中,驗證裝飾器(@validator)是一個核心功能,允許開發(fā)者在數(shù)據(jù)模型上定義自定義的驗證邏輯。

Pydantic 的主要功能包括:

  1. 數(shù)據(jù)模型定義:使用類型注解定義數(shù)據(jù)模型的結(jié)構(gòu)和類型。
  2. 數(shù)據(jù)驗證:在創(chuàng)建模型實例時自動驗證數(shù)據(jù)類型和約束條件,如長度限制、正則匹配等。
  3. 數(shù)據(jù)解析:將輸入數(shù)據(jù)(如 JSON、字典)解析成模型實例,并保留類型安全性和驗證規(guī)則。
  4. 模型嵌套:支持定義嵌套的數(shù)據(jù)模型。
  5. 自定義驗證函數(shù):使用 @validator 裝飾器定義自定義的驗證邏輯。
  6. 自動生成文檔:從模型生成 JSON 架構(gòu),提供了自動生成文檔等功能。
  7. 高效性:Pydantic 的核心驗證邏輯是用 Rust 編寫的,使其成為 Python 中最快的數(shù)據(jù)驗證庫之一。

用法示例

以下是一個使用 Pydantic 和其驗證裝飾器的示例:

from pydantic import BaseModel, validator, ValidationError, Field  
from typing import List, Optional  # 定義一個簡單的用戶模型  
class User(BaseModel):  id: int  name: str = Field(..., min_length=4, max_length=20, title="用戶名")  email: str = Field(..., regex=r'^[\w.-]+@[\w-]+\.\w{2,}$', title="郵箱地址")  age: int = Field(gt=0, lt=150, description="年齡(0-150歲)")  is_active: bool = Field(default=True, title="是否活躍")  # 自定義驗證函數(shù),驗證名字是否唯一(這里僅為示例,實際中需要查詢數(shù)據(jù)庫等)  @validator('name')  def check_name_uniqueness(cls, v, values, **kwargs):  # 假設(shè)已有一個用戶列表,用于檢查名字是否唯一  existing_names = ['alice', 'bob']  # 實際中應(yīng)替換為數(shù)據(jù)庫查詢等邏輯  if v in existing_names:  raise ValueError('用戶名已存在')  return v  # 驗證朋友列表中的每個元素是否為有效字符串  @validator('friends')  def check_friends(cls, v, **kwargs):  if not all(isinstance(friend, str) for friend in v):  raise ValueError('朋友列表中的每個元素都必須是字符串')  return v  # 示例用法  
try:  # 嘗試創(chuàng)建一個不符合規(guī)則的用戶實例(名字太短)  user1 = User(id=1, name='abc', email='abc@example.com', age=30, is_active=True)  
except ValidationError as e:  print(e.json())  # 輸出驗證錯誤信息  try:  # 嘗試創(chuàng)建一個不符合規(guī)則的用戶實例(朋友列表中包含非字符串元素)  user2 = User(id=2, name='validuser', email='validuser@example.com', age=25, is_active=True, friends=[123, 'friend2'])  
except ValidationError as e:  print(e.json())  # 輸出驗證錯誤信息  try:  # 嘗試創(chuàng)建一個符合規(guī)則的用戶實例  user3 = User(id=3, name='validuser3', email='validuser3@example.com', age=20, is_active=True, friends=['friend1', 'friend2'])  print(user3.json())  # 輸出用戶實例的 JSON 表示  
except ValidationError as e:  print(e.json())  # 正常情況下不會執(zhí)行到這里

在上面的示例中,我們定義了一個 User 模型,并使用 Pydantic 的驗證裝飾器來添加自定義的驗證邏輯。check_name_uniqueness 方法用于檢查用戶名是否唯一(這里僅為示例邏輯,實際中需要查詢數(shù)據(jù)庫等),check_friends 方法用于驗證朋友列表中的每個元素是否為有效字符串。然后,我們嘗試創(chuàng)建幾個用戶實例,并捕獲和處理驗證錯誤。

需要注意的是,Pydantic 的驗證邏輯是在模型實例創(chuàng)建時自動執(zhí)行的,如果數(shù)據(jù)不符合模型的定義,則會拋出 ValidationError 異常。此外,Pydantic 還提供了豐富的錯誤信息和文檔生成功能,方便開發(fā)者進行調(diào)試和集成。

SQLAlchemy[asyncio]==2.0.31 SQL 工具包和ORM庫

SQLAlchemy 庫的功能介紹

SQLAlchemy 是一個流行的 Python SQL 工具包和對象關(guān)系映射(ORM)庫。它提供了一個高級抽象層,用于在 Python 應(yīng)用程序中處理數(shù)據(jù)庫操作。SQLAlchemy 的主要功能包括:

  1. ORM(對象關(guān)系映射):允許你以面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫,而不需要直接編寫 SQL 語句。
  2. SQL 表達式語言:提供了一個 SQL 表達式構(gòu)造器,用于構(gòu)建 SQL 語句,同時保持與 Python 的集成。
  3. 連接池:管理數(shù)據(jù)庫連接,以提高性能和可靠性。
  4. 方言支持:支持多種數(shù)據(jù)庫后端,包括 PostgreSQL、MySQL、SQLite、Oracle 等。
  5. 事務(wù)管理:提供對數(shù)據(jù)庫事務(wù)的支持,允許你以 ACID(原子性、一致性、隔離性、持久性)原則管理數(shù)據(jù)。
  6. 自動遷移:雖然 SQLAlchemy 本身不提供數(shù)據(jù)庫遷移工具,但它與 Alembic 等遷移工具集成得很好,允許你管理數(shù)據(jù)庫模式的演變。
  7. 關(guān)系映射:支持復(fù)雜的關(guān)系映射,如一對一、一對多、多對多等。
  8. 查詢語言:提供了一個查詢 API,允許你以 Pythonic 的方式構(gòu)建和執(zhí)行數(shù)據(jù)庫查詢。

連接 PostgreSQL 和 MySQL 數(shù)據(jù)庫的用法示例

1. 連接 PostgreSQL 數(shù)據(jù)庫

首先,你需要安裝 SQLAlchemy 和 psycopg2(PostgreSQL 的 Python 驅(qū)動程序):

pip install sqlalchemy psycopg2-binary

然后,你可以使用以下代碼連接到 PostgreSQL 數(shù)據(jù)庫:

from sqlalchemy import create_engine  # 替換為你的數(shù)據(jù)庫連接信息  
DATABASE_URL = "postgresql+psycopg2://username:password@localhost/dbname"  # 創(chuàng)建引擎  
engine = create_engine(DATABASE_URL)  # 連接到數(shù)據(jù)庫(可選,通常用于測試連接)  
with engine.connect() as connection:  # 執(zhí)行一些數(shù)據(jù)庫操作,比如查詢  result = connection.execute("SELECT version();")  print(result.fetchone())

2. 連接 MySQL 數(shù)據(jù)庫

首先,你需要安裝 SQLAlchemy 和 pymysql(MySQL 的 Python 驅(qū)動程序):

pip install sqlalchemy pymysql

然后,你可以使用以下代碼連接到 MySQL 數(shù)據(jù)庫:

from sqlalchemy import create_engine  # 替換為你的數(shù)據(jù)庫連接信息  
DATABASE_URL = "mysql+pymysql://username:password@localhost/dbname"  # 創(chuàng)建引擎  
engine = create_engine(DATABASE_URL)  # 連接到數(shù)據(jù)庫(可選,通常用于測試連接)  
with engine.connect() as connection:  # 執(zhí)行一些數(shù)據(jù)庫操作,比如查詢  result = connection.execute("SELECT VERSION();")  print(result.fetchone())

在上面的示例中,DATABASE_URL 是一個包含數(shù)據(jù)庫連接信息的字符串。你需要將其替換為你的實際數(shù)據(jù)庫用戶名、密碼、主機名和數(shù)據(jù)庫名。

使用 ORM 進行數(shù)據(jù)庫操作

以下是一個使用 SQLAlchemy ORM 進行數(shù)據(jù)庫操作的簡單示例:

from sqlalchemy import create_engine, Column, Integer, String  
from sqlalchemy.ext.declarative import declarative_base  
from sqlalchemy.orm import sessionmaker  # 創(chuàng)建基礎(chǔ)類  
Base = declarative_base()  # 定義模型  
class User(Base):  __tablename__ = 'users'  id = Column(Integer, primary_key=True, index=True)  name = Column(String, index=True)  email = Column(String, unique=True, index=True)  # 創(chuàng)建引擎(以 PostgreSQL 為例)  
engine = create_engine("postgresql+psycopg2://username:password@localhost/dbname")  # 創(chuàng)建所有表  
Base.metadata.create_all(bind=engine)  # 創(chuàng)建會話  
Session = sessionmaker(bind=engine)  
session = Session()  # 創(chuàng)建新用戶  
new_user = User(name="John Doe", email="john.doe@example.com")  
session.add(new_user)  
session.commit()  # 查詢用戶  
users = session.query(User).all()  
for user in users:  print(user.name, user.email)

在這個示例中,我們首先定義了一個 User 模型,它對應(yīng)于數(shù)據(jù)庫中的一個表。然后,我們創(chuàng)建了一個 SQLAlchemy 引擎,并使用它創(chuàng)建了所有必要的數(shù)據(jù)庫表。接著,我們創(chuàng)建了一個會話,并使用它來添加新用戶到數(shù)據(jù)庫中,并查詢所有用戶。

請注意,在實際應(yīng)用中,你應(yīng)該處理數(shù)據(jù)庫連接錯誤、事務(wù)回滾以及會話管理等事務(wù)。此外,對于生產(chǎn)環(huán)境,你應(yīng)該考慮使用數(shù)據(jù)庫連接池和其他性能優(yōu)化技術(shù)。

psycopg2==2.9.10 訪問PostgreSQL數(shù)據(jù)庫系統(tǒng)

功能介紹

psycopg2是Python的一個第三方庫,它提供了訪問PostgreSQL數(shù)據(jù)庫系統(tǒng)的功能。以下是對psycopg2庫的主要功能介紹:

  1. 高性能:psycopg2基于C語言實現(xiàn),因此能夠提供高效的數(shù)據(jù)庫操作,適合處理大規(guī)模數(shù)據(jù)集和高并發(fā)請求。
  2. 完全兼容:psycopg2與PostgreSQL數(shù)據(jù)庫完全兼容,并支持大多數(shù)PostgreSQL特性,包括事務(wù)管理、游標操作、數(shù)據(jù)類型轉(zhuǎn)換等。
  3. 簡單易用:psycopg2提供了簡單的API,易于學習和使用,使開發(fā)人員能夠快速上手并進行數(shù)據(jù)庫操作。
  4. 安全性:psycopg2具有內(nèi)置的防止SQL注入攻擊的功能,通過參數(shù)化查詢等機制來保證數(shù)據(jù)安全。
  5. 功能豐富:除了基本的數(shù)據(jù)庫操作(如查詢、插入、更新、刪除)外,psycopg2還支持COPY TO/COPY FROM語句等高級功能。

用法示例

以下是一個使用psycopg2庫連接PostgreSQL數(shù)據(jù)庫、執(zhí)行查詢并處理結(jié)果的示例:

import psycopg2  
from psycopg2 import sql  # 數(shù)據(jù)庫連接參數(shù)  
DB_NAME = "your_database_name"  
DB_USER = "your_database_user"  
DB_PASSWORD = "your_database_password"  
DB_HOST = "your_database_host"  
DB_PORT = "your_database_port"  # 通常是5432  # 連接到數(shù)據(jù)庫  
try:  connection = psycopg2.connect(  dbname=DB_NAME,  user=DB_USER,  password=DB_PASSWORD,  host=DB_HOST,  port=DB_PORT  )  print("連接成功")  # 創(chuàng)建一個游標對象  cursor = connection.cursor()  # 執(zhí)行SQL查詢  query = sql.SQL("SELECT id, name FROM your_table")  cursor.execute(query)  # 獲取所有查詢結(jié)果  results = cursor.fetchall()  # 處理結(jié)果  for row in results:  print(f"ID: {row[0]}, Name: {row[1]}")  except Exception as error:  print(f"Error: {error}")  finally:  # 關(guān)閉游標和連接  if cursor:  cursor.close()  if connection:  connection.close()  print("數(shù)據(jù)庫連接已關(guān)閉")

在上述示例中,我們首先導入了psycopg2庫和sql子模塊。然后,我們定義了數(shù)據(jù)庫連接參數(shù),并使用這些參數(shù)連接到PostgreSQL數(shù)據(jù)庫。接下來,我們創(chuàng)建了一個游標對象,并使用它執(zhí)行了一個SQL查詢。查詢結(jié)果通過fetchall()方法獲取,并遍歷打印出來。最后,我們關(guān)閉了游標和數(shù)據(jù)庫連接。

需要注意的是,在實際應(yīng)用中,應(yīng)該確保數(shù)據(jù)庫憑據(jù)的安全存儲和訪問,避免將敏感信息硬編碼在代碼中。此外,還可以使用參數(shù)化查詢來防止SQL注入攻擊,提高數(shù)據(jù)安全性。

其他功能示例

除了基本的數(shù)據(jù)庫操作外,psycopg2還支持許多其他功能。以下是一些示例:

  1. 使用with語句管理資源
with psycopg2.connect(dbname=DB_NAME, user=DB_USER, password=DB_PASSWORD, host=DB_HOST, port=DB_PORT) as connection:  with connection.cursor() as cursor:  query = sql.SQL("SELECT id, name FROM your_table")  cursor.execute(query)  results = cursor.fetchall()  for row in results:  print(f"ID: {row[0]}, Name: {row[1]}")

使用with語句可以自動管理資源(如游標和連接)的生命周期,無需手動關(guān)閉它們。

  1. 執(zhí)行INSERT、UPDATE、DELETE操作并提交事務(wù)
with psycopg2.connect(dbname=DB_NAME, user=DB_USER, password=DB_PASSWORD, host=DB_HOST, port=DB_PORT) as connection:  with connection.cursor() as cursor:  # 插入數(shù)據(jù)  insert_query = sql.SQL("INSERT INTO your_table (id, name) VALUES (%s, %s)")  cursor.execute(insert_query, (1, 'Alice'))  # 更新數(shù)據(jù)  update_query = sql.SQL("UPDATE your_table SET name = %s WHERE id = %s")  cursor.execute(update_query, ('Bob', 1))  # 刪除數(shù)據(jù)  delete_query = sql.SQL("DELETE FROM your_table WHERE id = %s")  cursor.execute(delete_query, (1,))  # 提交事務(wù)  connection.commit()

在執(zhí)行INSERT、UPDATE、DELETE等修改數(shù)據(jù)的操作時,需要調(diào)用connection.commit()方法來提交事務(wù),以確保更改被保存到數(shù)據(jù)庫中。

  1. 使用COPY TO/COPY FROM語句
with psycopg2.connect(dbname=DB_NAME, user=DB_USER, password=DB_PASSWORD, host=DB_HOST, port=DB_PORT) as connection:  with connection.cursor() as cursor:  # 將數(shù)據(jù)從表中復(fù)制到CSV文件中  copy_to_query = sql.SQL("COPY your_table TO STDOUT WITH CSV HEADER")  with open('output.csv', 'w', newline='') as f:  cursor.copy_expert(copy_to_query, f)  # 從CSV文件中復(fù)制數(shù)據(jù)到表中  copy_from_query = sql.SQL("COPY your_table FROM STDIN WITH CSV HEADER")  with open('input.csv', 'r') as f:  cursor.copy_from(f, your_table, sep=',')

COPY TO/COPY FROM語句是PostgreSQL中的高級功能,可以快速地將數(shù)據(jù)從表中導出到外部文件或從外部文件導入到表中。在psycopg2中,可以使用cursor.copy_expert()和cursor.copy_from()方法來實現(xiàn)這些操作。

通過以上示例和介紹,您可以更好地了解psycopg2庫的功能和用法,并在實際應(yīng)用中靈活運用它來訪問和操作PostgreSQL數(shù)據(jù)庫。

asyncpg==0.30.0 PostgreSQL數(shù)據(jù)庫客戶端庫

功能介紹

asyncpg 是一個專為 Python/asyncio 設(shè)計的高效、干凈的 PostgreSQL 服務(wù)器二進制協(xié)議實現(xiàn)。它提供了一種與 PostgreSQL 進行交互的新方式,特別適用于異步編程環(huán)境。以下是 asyncpg 的主要功能:

  1. 高性能
  • asyncpg 直接實現(xiàn)了 PostgreSQL 服務(wù)器的二進制協(xié)議,避免了傳統(tǒng)數(shù)據(jù)庫接口庫(如 DB-API)的通用性帶來的性能損失。
  • 在測試中,asyncpg 的性能平均比 psycopg3 快 5 倍,特別適合高并發(fā)和高吞吐量的應(yīng)用場景。
  1. 異步操作
  • 基于 Python 的 asyncio 框架,asyncpg 能夠高效處理數(shù)據(jù)庫操作,特別適合高并發(fā)場景。
  • 提供了異步的數(shù)據(jù)庫連接、查詢、插入、更新和刪除等操作。
  1. 豐富的功能支持
  • 支持預(yù)處理語句,提高查詢效率并減少 SQL 注入風險。
  • 支持可滾動游標,方便分頁和部分迭代查詢結(jié)果。
  • 自動編碼和解碼復(fù)合類型、數(shù)組以及它們的組合,簡化了復(fù)雜數(shù)據(jù)類型的處理。
  1. 易用性
  • 提供了簡單直觀的接口,便于進行連接管理、查詢執(zhí)行和數(shù)據(jù)操作。
  • 詳盡的項目文檔可以幫助開發(fā)者迅速理解和使用 asyncpg。
  1. 無依賴性
  • asyncpg 可通過 PyPI 直接安裝,無需額外的依賴包。

用法示例

以下是一個使用 asyncpg 進行異步數(shù)據(jù)庫操作的示例:

  1. 安裝 asyncpg

    首先,你需要通過 pip 安裝 asyncpg 庫:

    pip install asyncpg
    
  2. 連接數(shù)據(jù)庫并執(zhí)行查詢

    接下來,你可以使用 asyncpg 連接到 PostgreSQL 數(shù)據(jù)庫并執(zhí)行查詢。以下是一個簡單的示例:

    import asyncio  
    import asyncpg  async def run():  # 連接到數(shù)據(jù)庫  conn = await asyncpg.connect(  user='your_username',  password='your_password',  database='your_database',  host='127.0.0.1'  )  try:  # 執(zhí)行查詢  values = await conn.fetch(  'SELECT * FROM your_table WHERE id = $1',  1  )  print(values)  finally:  # 關(guān)閉連接  await conn.close()  # 運行異步任務(wù)  
    loop = asyncio.get_event_loop()  
    loop.run_until_complete(run())
    

    在這個示例中,我們創(chuàng)建了一個異步函數(shù) run,它首先連接到 PostgreSQL 數(shù)據(jù)庫,然后執(zhí)行一個查詢操作,并打印查詢結(jié)果。最后,我們關(guān)閉數(shù)據(jù)庫連接。為了運行這個異步任務(wù),我們使用 asyncio.get_event_loop() 獲取事件循環(huán),并調(diào)用 run_until_complete 方法來運行 run 函數(shù)。

  3. 使用連接池

    在高并發(fā)場景下,使用連接池可以更有效地管理數(shù)據(jù)庫連接。以下是一個使用連接池的示例:

    import asyncio  
    import asyncpg  async def init_pool():  return await asyncpg.create_pool(  user='your_username',  password='your_password',  database='your_database',  host='127.0.0.1',  min_size=5,  max_size=10  )  async def run(pool):  async with pool.acquire() as conn:  values = await conn.fetch(  'SELECT * FROM your_table WHERE id = $1',  1  )  print(values)  async def main():  pool = await init_pool()  try:  await run(pool)  finally:  await pool.close()  # 運行異步任務(wù)  
    loop = asyncio.get_event_loop()  
    loop.run_until_complete(main())
    

    在這個示例中,我們首先創(chuàng)建了一個連接池,并在 run 函數(shù)中使用 pool.acquire() 方法獲取一個連接。然后,我們執(zhí)行查詢操作并打印查詢結(jié)果。最后,我們關(guān)閉連接池。為了運行這個異步任務(wù),我們創(chuàng)建了一個 main 函數(shù)來初始化連接池,并在 finally 塊中關(guān)閉連接池。然后,我們使用事件循環(huán)來運行 main 函數(shù)。

通過以上介紹和示例代碼,你可以了解到 asyncpg 庫的基本功能和用法。無論是在簡單的數(shù)據(jù)庫操作還是復(fù)雜的異步編程場景中,asyncpg 都能為你提供高效且可靠的支持。

redis==5.0.7 與 Redis 數(shù)據(jù)庫進行交互

功能介紹

Python Redis 庫(通常指 redis-py)是一個用于與 Redis 數(shù)據(jù)庫進行交互的 Python 客戶端。Redis 是一個開源的、內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng),它可以用作數(shù)據(jù)庫、緩存和消息中間件。redis-py 庫提供了豐富的功能,使得 Python 程序能夠方便地訪問 Redis 提供的各種數(shù)據(jù)結(jié)構(gòu)(如字符串、哈希、列表、集合、有序集合等)和高級功能(如發(fā)布/訂閱、事務(wù)、腳本執(zhí)行等)。

以下是 redis-py 庫的一些主要功能:

  1. 連接管理:支持多種連接模式,包括單連接、連接池和發(fā)布/訂閱連接。
  2. 數(shù)據(jù)結(jié)構(gòu)操作:提供了對 Redis 數(shù)據(jù)結(jié)構(gòu)的操作方法,如 set、gethset、hget、lpushrpop、saddsmembers、zadd、zrange 等。
  3. 事務(wù)處理:支持 Redis 事務(wù),可以通過 multi、execdiscardwatch 命令來實現(xiàn)。
  4. 發(fā)布/訂閱:提供了發(fā)布/訂閱功能,允許客戶端訂閱一個或多個頻道,并從這些頻道接收消息。
  5. 管道:通過管道可以將多個命令打包在一起,然后一次性發(fā)送給 Redis 服務(wù)器執(zhí)行,從而減少了網(wǎng)絡(luò)往返次數(shù),提高了執(zhí)行效率。
  6. 腳本執(zhí)行:支持使用 Lua 腳本在 Redis 服務(wù)器上執(zhí)行復(fù)雜的操作。
  7. 連接安全性:支持 SSL/TLS 加密連接,確保數(shù)據(jù)傳輸?shù)陌踩浴?/li>

用法示例

以下是一個使用 redis-py 庫連接 Redis 數(shù)據(jù)庫、執(zhí)行基本操作并處理結(jié)果的示例:

import redis  # 連接到 Redis 服務(wù)器  
r = redis.Redis(host='localhost', port=6379, db=0)  # 設(shè)置一個鍵值對  
r.set('foo', 'bar')  # 獲取鍵的值  
value = r.get('foo')  
print(value.decode('utf-8'))  # 輸出: bar  # 使用哈希數(shù)據(jù)結(jié)構(gòu)  
r.hset('myhash', 'field1', 'value1')  
r.hset('myhash', 'field2', 'value2')  # 獲取哈希字段的值  
field1_value = r.hget('myhash', 'field1')  
print(field1_value.decode('utf-8'))  # 輸出: value1  # 獲取哈希的所有字段和值  
myhash_values = r.hgetall('myhash')  
for field, value in myhash_values.items():  print(f"{field.decode('utf-8')}: {value.decode('utf-8')}")  # 使用列表數(shù)據(jù)結(jié)構(gòu)  
r.lpush('mylist', 'element1')  
r.lpush('mylist', 'element2')  # 獲取列表的元素  
mylist_elements = r.lrange('mylist', 0, -1)  
for element in mylist_elements:  print(element.decode('utf-8'))  # 事務(wù)處理示例  
try:  pipe = r.pipeline()  pipe.multi()  pipe.set('key1', 'value1')  pipe.set('key2', 'value2')  pipe.execute()  
except redis.exceptions.WatchError:  print("Transaction failed due to concurrent modification.")  # 發(fā)布/訂閱示例(需要在另一個客戶端中訂閱頻道以查看消息)  
# pub = redis.Redis(host='localhost', port=6379, db=0)  
# pub.publish('mychannel', 'Hello, World!')  # 使用管道  
pipe = r.pipeline()  
pipe.set('key3', 'value3')  
pipe.get('key3')  
results, _ = pipe.execute()  
print(results[1].decode('utf-8'))  # 輸出: value3

注意

  1. 在連接 Redis 服務(wù)器時,您需要提供 Redis 服務(wù)器的主機名(host)、端口號(port)和數(shù)據(jù)庫索引(db)。默認情況下,Redis 服務(wù)器運行在本地主機的 6379 端口上,數(shù)據(jù)庫索引為 0。
  2. 由于 Redis 存儲的值是二進制安全的,因此 get、hget 等命令返回的值是字節(jié)串(bytes)。如果您希望將其轉(zhuǎn)換為字符串,請使用 .decode('utf-8') 方法進行解碼。
  3. 在事務(wù)處理示例中,我們使用了 pipelinemulti 命令來創(chuàng)建一個事務(wù)。如果事務(wù)在執(zhí)行過程中被其他客戶端修改(例如,通過 watch 命令監(jiān)視的鍵被修改),則會引發(fā) WatchError 異常。
  4. 發(fā)布/訂閱功能需要在另一個客戶端中訂閱相應(yīng)的頻道才能看到發(fā)布的消息。在上面的示例中,我們注釋掉了發(fā)布消息的代碼,您可以在另一個 Python 腳本或 Redis 客戶端中訂閱 mychannel 頻道來接收消息。

通過以上示例和介紹,您可以更好地了解 redis-py 庫的功能和用法,并在實際應(yīng)用中靈活運用它來與 Redis 數(shù)據(jù)庫進行交互。

requests==2.32.3 HTTP 客戶端庫

功能介紹

Requests 是一個簡單且優(yōu)雅的 Python HTTP 客戶端庫,專門用于發(fā)送 HTTP 請求。相比于 Python 標準庫中的 urllib,Requests 更加簡潔易用,且功能強大。Requests 庫提供了豐富的功能,包括:

  1. Keep-Alive & 連接池:支持 HTTP 持久連接和連接池,提高了網(wǎng)絡(luò)請求的效率。
  2. 國際化域名和 URL:支持國際化域名和 URL,方便處理不同語言的網(wǎng)站。
  3. 帶持久 Cookie 的會話:支持會話對象,可以跨請求保持 Cookie。
  4. 瀏覽器式的 SSL 認證:提供瀏覽器式的 SSL 證書驗證,確保數(shù)據(jù)傳輸?shù)陌踩浴?/li>
  5. 自動內(nèi)容解碼:自動解碼響應(yīng)內(nèi)容,支持 gzip、deflate 等壓縮格式。
  6. 基本/摘要式的身份認證:支持 HTTP 基本認證和摘要認證。
  7. 優(yōu)雅的 key/value Cookie:以字典形式管理 Cookie,方便操作。
  8. 自動解壓:自動解壓響應(yīng)內(nèi)容,如 gzip、deflate 等。
  9. Unicode 響應(yīng)體:響應(yīng)體以 Unicode 形式返回,方便處理文本數(shù)據(jù)。
  10. HTTP(S) 代理支持:支持通過 HTTP 或 HTTPS 代理發(fā)送請求。
  11. 文件分塊上傳:支持將大文件分塊上傳,提高上傳效率。
  12. 流下載:支持以流的方式下載文件,適用于大文件下載。
  13. 連接超時:可以設(shè)置請求的超時時間,防止請求長時間無響應(yīng)。
  14. 分塊請求:支持將請求體分塊發(fā)送,適用于發(fā)送大數(shù)據(jù)量。

用法示例

以下是一些使用 Requests 庫發(fā)送 HTTP 請求的示例:

  1. 發(fā)送 GET 請求
import requests  # 發(fā)送 GET 請求  
response = requests.get('https://httpbin.org/get')  # 打印響應(yīng)狀態(tài)碼  
print(response.status_code)  # 打印響應(yīng)內(nèi)容  
print(response.text)
  1. 發(fā)送帶參數(shù)的 GET 請求
import requests  # 發(fā)送帶參數(shù)的 GET 請求  
params = {'name': 'gemey', 'age': 22}  
response = requests.get('https://httpbin.org/get', params=params)  # 打印響應(yīng)內(nèi)容  
print(response.text)
  1. 發(fā)送 POST 請求
import requests  # 發(fā)送 POST 請求  
data = {'key': 'value'}  
response = requests.post('https://httpbin.org/post', data=data)  # 打印響應(yīng)內(nèi)容  
print(response.text)
  1. 處理 JSON 數(shù)據(jù)
import requests  # 發(fā)送 GET 請求并解析 JSON 數(shù)據(jù)  
response = requests.get('https://httpbin.org/get')  
json_data = response.json()  # 打印 JSON 數(shù)據(jù)  
print(json_data)
  1. 設(shè)置自定義 Header
import requests  # 設(shè)置自定義 Header  
headers = {'User-Agent': 'Mozilla/5.0'}  
response = requests.get('https://www.baidu.com', headers=headers)  # 打印響應(yīng)狀態(tài)碼  
print(response.status_code)
  1. 使用代理
import requests  # 設(shè)置代理  
proxies = {  'http': 'http://127.0.0.1:8080',  'https': 'http://127.0.0.1:8080',  
}  
response = requests.get('https://httpbin.org/get', proxies=proxies)  # 打印響應(yīng)內(nèi)容  
print(response.text)
  1. 處理重定向和超時
import requests  try:  # 發(fā)送 GET 請求,設(shè)置超時時間為 5 秒  response = requests.get('https://httpbin.org/delay/5', timeout=5)  print(response.text)  
except requests.exceptions.Timeout:  # 捕獲超時異常  print('Request timed out')
  1. 使用 Session 對象
import requests  # 創(chuàng)建 Session 對象  
session = requests.Session()  # 發(fā)送 GET 請求  
response = session.get('https://httpbin.org/get')  
print(response.text)  # 發(fā)送 POST 請求  
data = {'key': 'value'}  
response = session.post('https://httpbin.org/post', data=data)  
print(response.text)

通過以上示例,您可以了解 Requests 庫的基本用法和功能。Requests 庫提供了簡潔易用的 API,使得發(fā)送 HTTP 請求和處理響應(yīng)變得非常簡單。無論是發(fā)送 GET 請求、POST 請求,還是處理 JSON 數(shù)據(jù)、設(shè)置自定義 Header、使用代理等,Requests 庫都能輕松應(yīng)對。

APScheduler==3.10.4 定時任務(wù)調(diào)度庫

功能介紹

APScheduler(Advanced Python Scheduler)是一個輕量級的 Python 定時任務(wù)調(diào)度框架,它提供了靈活且強大的任務(wù)調(diào)度功能。以下是 APScheduler 的主要功能:

  1. 多種調(diào)度方式
  • 支持間隔調(diào)度(interval):按照固定的時間間隔執(zhí)行任務(wù)。
  • 支持定時調(diào)度(date):在指定的時間點執(zhí)行任務(wù)。
  • 支持CRON表達式調(diào)度(cron):按照CRON表達式的規(guī)則周期性執(zhí)行任務(wù)。
  1. 多種觸發(fā)器
  • 提供了簡單的時間觸發(fā)器、日期觸發(fā)器、CRON觸發(fā)器等多種觸發(fā)器類型,滿足不同場景下的任務(wù)調(diào)度需求。
  1. 可擴展的作業(yè)存儲
  • 支持內(nèi)存、數(shù)據(jù)庫等多種作業(yè)存儲方式,方便管理和持久化存儲作業(yè)信息。
  1. 包含調(diào)度邏輯
  • 每一個作業(yè)有它自己的觸發(fā)器,用于決定接下來哪一個作業(yè)會運行。
  1. 事件監(jiān)聽
  • 用戶可以自定義一些函數(shù)來監(jiān)聽APScheduler在進行某些操作時觸發(fā)的事件,如任務(wù)執(zhí)行異常事件、任務(wù)錯過執(zhí)行時間事件等。
  1. 多種執(zhí)行器
  • 支持ThreadPoolExecutor、ProcessPoolExecutor等多種執(zhí)行器,可以根據(jù)實際需求選擇合適的執(zhí)行器來執(zhí)行任務(wù)。

用法示例

以下是一個使用 APScheduler 創(chuàng)建定時任務(wù)的示例:

  1. 安裝 APScheduler

    首先,你需要通過 pip 安裝 APScheduler 庫:

    pip install apscheduler
    
  2. 創(chuàng)建并啟動調(diào)度器

    接下來,你可以創(chuàng)建一個調(diào)度器并添加任務(wù)。以下是一個使用 BlockingScheduler 創(chuàng)建每隔5秒執(zhí)行一次任務(wù)的示例:

    from apscheduler.schedulers.blocking import BlockingScheduler  
    from datetime import datetime  def job():  print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))  scheduler = BlockingScheduler()  
    scheduler.add_job(job, 'interval', seconds=5)  
    scheduler.start()
    

    在這個示例中,我們創(chuàng)建了一個 BlockingScheduler 實例,并使用 add_job 方法添加了一個任務(wù)。這個任務(wù)會每隔5秒執(zhí)行一次,并打印當前的時間。

  3. 使用 BackgroundScheduler 在后臺執(zhí)行任務(wù)

    如果你希望調(diào)度器在后臺執(zhí)行,可以使用 BackgroundScheduler。以下是一個示例:

    from apscheduler.schedulers.background import BackgroundScheduler  
    import time  def job():  print("Executing job...")  scheduler = BackgroundScheduler()  
    scheduler.add_job(job, 'interval', seconds=10)  
    scheduler.start()  try:  # 主線程繼續(xù)執(zhí)行其他任務(wù)  while True:  print("Main thread is running...")  time.sleep(2)  
    except (KeyboardInterrupt, SystemExit):  # 當主線程退出時,關(guān)閉調(diào)度器  scheduler.shutdown()
    

    在這個示例中,我們創(chuàng)建了一個 BackgroundScheduler 實例,并添加了一個每隔10秒執(zhí)行一次的任務(wù)。然后,主線程繼續(xù)執(zhí)行其他任務(wù),而調(diào)度器在后臺運行并執(zhí)行任務(wù)。

  4. 配置作業(yè)存儲和執(zhí)行器

    APScheduler 支持多種作業(yè)存儲和執(zhí)行器。以下是一個使用 MongoDB 存儲作業(yè)和 ThreadPoolExecutor 執(zhí)行任務(wù)的示例:

    from apscheduler.schedulers.blocking import BlockingScheduler  
    from apscheduler.jobstores.mongodb import MongoDBJobStore  
    from apscheduler.executors.pool import ThreadPoolExecutor  
    from pymongo import MongoClient  
    from datetime import datetime  # MongoDB 參數(shù)  
    client = MongoClient('127.0.0.1', 27017)  def job():  print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))  # 存儲方式  
    jobstores = {  'mongo': MongoDBJobStore(collection='job', database='test', client=client),  'default': 'memory'  # 默認使用內(nèi)存存儲,這里為了示例同時配置了 mongo 和 memory  
    }  
    executors = {  'default': ThreadPoolExecutor(10)  # 使用線程池執(zhí)行器,最大線程數(shù)為10  
    }  
    job_defaults = {  'coalesce': False,  # 默認情況下關(guān)閉新的作業(yè)合并  'max_instances': 10  # 設(shè)置調(diào)度程序?qū)⑼瑫r運行的特定作業(yè)的最大實例數(shù)  
    }  scheduler = BlockingScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults)  
    scheduler.add_job(job, 'interval', seconds=5, jobstore='mongo')  # 將作業(yè)添加到 mongo 存儲中  
    scheduler.start()
    

    在這個示例中,我們配置了 MongoDB 作為作業(yè)存儲,并使用了 ThreadPoolExecutor 作為執(zhí)行器。然后,我們創(chuàng)建了一個調(diào)度器,并將一個任務(wù)添加到 MongoDB 存儲中。

通過以上介紹和示例代碼,你可以了解到 APScheduler 庫的基本功能和用法。無論是在簡單的定時任務(wù)調(diào)度還是復(fù)雜的作業(yè)管理場景中,APScheduler 都能為你提供靈活且強大的支持。

cachebox==4.1.2 緩存庫

功能介紹

cachebox 是一個用 Rust 編寫的 Python 緩存庫,它提供了高性能的緩存功能。cachebox 利用了 Rust 語言的高效性以及 Google 的高性能 SwissTable 散列表來實現(xiàn)其卓越的性能。以下是 cachebox 的主要功能:

  1. 高性能
  • cachebox 宣稱自己是最快的 Python 緩存庫之一,通過高效的 Rust 實現(xiàn)和優(yōu)化的數(shù)據(jù)結(jié)構(gòu),顯著提高了緩存操作的性能。
  • 適用于各種需要高性能緩存的應(yīng)用場景,如實時交易系統(tǒng)、大數(shù)據(jù)處理平臺等。
  1. 線程安全
  • cachebox 通過采用讀寫鎖(RwLock),確保在多線程環(huán)境下的穩(wěn)定性和可靠性。
  • 適用于高并發(fā)環(huán)境,避免數(shù)據(jù)競爭和線程安全問題。
  1. 豐富的緩存算法
  • cachebox 提供了超過七種不同的緩存策略,如 LRU(最近最少使用)、LFU(最不經(jīng)常使用)和 FIFO(先進先出)等。
  • 開發(fā)者可以根據(jù)具體需求靈活選擇合適的緩存策略,以滿足不同的緩存需求。
  1. 易用性
  • cachebox 的設(shè)計直觀明了,只需簡單導入即可享受增強版字典般的便捷體驗。
  • 提供了豐富的 API 接口,方便開發(fā)者進行緩存操作,如設(shè)置、獲取、刪除和清除緩存等。
  1. 廣泛的兼容性
  • cachebox 支持 Python 3.8 及以上版本,包括 PyPy 和 CPython 兩種解釋器環(huán)境。
  • 適用于各種 Python 項目和框架,方便集成和使用。

用法示例

以下是一個使用 cachebox 進行緩存操作的示例:

  1. 安裝 cachebox

    首先,你需要通過 pip 安裝 cachebox 庫:

    pip install cachebox
    
  2. 導入 cachebox 并創(chuàng)建緩存對象

    接下來,你可以導入 cachebox 并創(chuàng)建一個緩存對象。例如,你可以使用 LRU 緩存策略:

    from cachebox import Cache, LRUCache  # 創(chuàng)建一個 LRU 緩存對象,指定最大容量  
    cache = LRUCache(max_size=100)
    
  3. 設(shè)置和獲取緩存

    然后,你可以使用緩存對象來設(shè)置和獲取緩存值。例如:

    # 設(shè)置緩存值  
    cache.set('key1', 'value1')  # 獲取緩存值  
    value = cache.get('key1')  
    print(value)  # 輸出: value1
    
  4. 刪除和清除緩存

    你還可以刪除特定的緩存值或清除整個緩存。例如:

    # 刪除特定的緩存值  
    cache.delete('key1')  # 清除整個緩存  
    cache.clear()
    
  5. 高級用法

    cachebox 還提供了許多高級用法,如設(shè)置緩存過期時間、使用自定義的緩存策略等。你可以參考 cachebox 的官方文檔來獲取更多信息和示例。

通過以上介紹和示例代碼,你可以了解到 cachebox 庫的基本功能和用法。cachebox 以其高性能、線程安全性和豐富的緩存算法等優(yōu)點,適用于各種需要高性能緩存的應(yīng)用場景。無論是在日常開發(fā)還是高負載系統(tǒng)中,cachebox 都能為你提供顯著的幫助。

DateTime==5.5 日期時間庫

Python datetime 庫的功能介紹和用法示例

功能介紹

Python 的 datetime 模塊提供了一系列類,用于處理日期和時間。這些類包括 datetime、datetimetimedelta 以及 tzinfo(用于處理時區(qū)信息,但通常不直接使用其基類,而是使用它的子類,如 pytz 庫提供的時區(qū)信息)。以下是 datetime 模塊的一些主要功能和類:

  1. 日期和時間表示
  • date 類:表示日期(年、月、日)。
  • time 類:表示時間(時、分、秒、微秒)。
  • datetime 類:結(jié)合了 datetime,表示具體的日期和時間。
  1. 時間差計算
  • timedelta 類:表示兩個日期或時間之間的差異,支持天、秒、微秒等單位的加減運算。
  1. 時區(qū)支持

    (通過

    tzinfo
    

    基類和第三方庫如

    pytz
    

  • 雖然 datetime 模塊本身提供的 tzinfo 是一個抽象基類,但你可以使用像 pytz 這樣的庫來獲取具體的時區(qū)信息。
  1. 日期和時間的格式化與解析
  • strftime 方法:將日期或時間對象格式化為字符串。
  • strptime 方法(在 datetime 模塊中未直接提供,但可以通過 datetime.datetime.strptime 訪問):將字符串解析為日期或時間對象。
  1. 日期和時間的替換與修改
  • 可以通過替換或修改日期或時間對象的某些部分來創(chuàng)建新的對象,而不改變原始對象。

用法示例

以下是一些使用 datetime 模塊的示例代碼:

import datetime  # 獲取當前日期和時間  
now = datetime.datetime.now()  
print("當前日期和時間:", now)  # 創(chuàng)建特定的日期和時間對象  
specific_date = datetime.datetime(2023, 10, 5, 14, 30, 0)  
print("特定日期和時間:", specific_date)  # 日期和時間運算  
delta = datetime.timedelta(days=10, hours=3, minutes=30)  
future_date = now + delta  
print("未來日期和時間:", future_date)  # 格式化日期和時間  
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")  
print("格式化后的日期和時間:", formatted_date)  # 解析字符串為日期和時間對象  
parsed_date = datetime.datetime.strptime("2023-10-05 14:30:00", "%Y-%m-%d %H:%M:%S")  
print("解析后的日期和時間:", parsed_date)  # 替換日期和時間對象的某些部分  
replaced_date = now.replace(year=2024)  
print("替換年份后的日期和時間:", replaced_date)  # 提取日期和時間的各個部分  
year, month, day = now.year, now.month, now.day  
hour, minute, second = now.hour, now.minute, now.second  
print("年:", year, "月:", month, "日:", day, "時:", hour, "分:", minute, "秒:", second)

注意事項

  • 在處理時區(qū)時,建議使用 pytz 庫來獲取和處理時區(qū)信息,因為 datetime.tzinfo 是一個抽象基類,直接使用它可能會比較復(fù)雜。
  • datetime 對象是不可變的,這意味著你不能直接修改它們的值。當你對 datetime 對象進行運算或替換某些部分時,會返回一個新的 datetime 對象。
  • 在格式化日期和時間時,strftime 方法的格式字符串遵循特定的規(guī)則,你可以參考 Python 的官方文檔來獲取更多信息。

jsonpath-ng==1.5.3 解析和操作JSON數(shù)據(jù)

jsonpath-ng 是一個Python庫,它提供了使用JSONPath語法來解析和操作JSON數(shù)據(jù)的功能。JSONPath是一種用于在JSON數(shù)據(jù)中定位和提取特定元素的查詢語言,類似于XPath對XML的作用。以下是jsonpath-ng庫的功能介紹和用法示例:

功能介紹

  1. 數(shù)據(jù)提取
  • jsonpath-ng允許用戶通過JSONPath表達式從JSON數(shù)據(jù)中提取特定的元素。這可以簡化數(shù)據(jù)提取的過程,特別是在處理復(fù)雜的JSON結(jié)構(gòu)時。
  1. 數(shù)據(jù)過濾
  • JSONPath表達式支持過濾器,可以根據(jù)條件篩選出滿足要求的數(shù)據(jù)。這使得數(shù)據(jù)過濾更加靈活和高效。
  1. 數(shù)據(jù)修改
  • 除了提取數(shù)據(jù)外,jsonpath-ng還支持通過update()方法修改JSON數(shù)據(jù)中的特定元素。
  1. 錯誤處理
  • 在實際應(yīng)用中,可能會遇到路徑表達式錯誤或JSON數(shù)據(jù)結(jié)構(gòu)變化等異常情況。jsonpath-ng允許用戶添加適當?shù)腻e誤處理邏輯,以增強程序的穩(wěn)定性和可靠性。
  1. 與其他庫的集成
  • jsonpath-ng可以與其他Python庫(如Pandas、Flask、Django等)結(jié)合使用,以增強JSON數(shù)據(jù)處理能力。

用法示例

以下是一個簡單的示例,展示了如何使用jsonpath-ng從JSON數(shù)據(jù)中提取信息:

from jsonpath_ng import parse  # 示例JSON數(shù)據(jù)  
data = {  "store": {  "book": [  {  "category": "reference",  "author": "Nigel Rees",  "title": "Sayings of the Century",  "price": 8.95  },  {  "category": "fiction",  "author": "Evelyn Waugh",  "title": "Sword of Honour",  "price": 12.99  }  ],  "bicycle": {  "color": "red",  "price": 19.95  }  }  
}  # 解析JSONPath表達式并提取所有書籍的作者  
authors_path = parse("$.store.book[*].author")  
authors = [match.value for match in authors_path.find(data)]  
print(authors)  # 輸出: ['Nigel Rees', 'Evelyn Waugh']

在這個示例中,我們首先導入了jsonpath_ng庫中的parse函數(shù)。然后,我們定義了一個包含書籍和自行車信息的JSON數(shù)據(jù)。接下來,我們使用JSONPath表達式$.store.book[*].author來提取所有書籍的作者,并通過find()方法找到匹配的數(shù)據(jù)。最后,我們使用列表推導式將匹配到的作者名存儲在一個列表中,并打印出來。

另外,jsonpath-ng還支持修改JSON數(shù)據(jù)中的特定元素。以下是一個示例,展示了如何使用update()方法修改數(shù)據(jù):

from jsonpath_ng import parse  # 示例JSON數(shù)據(jù)  
data = {  "person": {  "name": "Alice",  "age": 30,  "address": {  "city": "New York",  "country": "USA"  }  }  
}  # 解析JSONPath表達式并更新特定鍵的值  
expression = parse("$.person.name")  
match = expression.find(data)  
if match:  match[0].update("Bob")  
print(data)  # 輸出: {'person': {'name': 'Bob', 'age': 30, 'address': {'city': 'New York', 'country': 'USA'}}}

在這個示例中,我們使用JSONPath表達式$.person.name來找到需要修改的鍵,并使用update()方法將其值更新為"Bob"。然后,我們打印出修改后的JSON數(shù)據(jù)。

綜上所述,jsonpath-ng是一個功能強大的Python庫,它允許用戶通過JSONPath表達式輕松地解析和操作JSON數(shù)據(jù)。

loguru==0.7.2 日志庫

Loguru是一個用于Python的日志庫,以其簡單易用、功能強大而著稱。以下是對Loguru庫的功能介紹和用法示例:

功能介紹

  1. 簡單易用
  • Loguru的API設(shè)計簡潔直觀,易于上手和使用。
  • 無需復(fù)雜的配置,開箱即用。
  1. 豐富的功能
  • 支持異步日志記錄,適合異步應(yīng)用程序。
  • 支持日志文件輪轉(zhuǎn),可以根據(jù)文件大小或時間自動輪換日志文件。
  • 支持日志格式化,可以自定義日志的輸出格式。
  • 提供日志過濾器功能,可以根據(jù)日志級別或其他條件過濾日志輸出。
  • 自動處理日志格式、文件管理和異常捕獲等。
  1. 多線程安全
  • 支持多線程和異步應(yīng)用程序的日志記錄,確保日志記錄的線程安全性。
  1. 強大的日志級別控制
  • Loguru提供了多個日志級別,如TRACE、DEBUG、INFO、SUCCESS、WARNING、ERROR和CRITICAL,允許用戶根據(jù)需要輸出不同級別的日志。
  1. 異常追蹤
  • Loguru可以自動捕獲和記錄異常信息,并將其與日志消息一起輸出,使得調(diào)試和排查問題更加方便。
  1. 彩色輸出支持
  • 在控制臺輸出日志時,Loguru支持彩色輸出,使日志更易于閱讀和區(qū)分。
  1. 上下文管理
  • Loguru提供了上下文管理功能,可以輕松地添加自定義上下文信息到日志消息中,以便更好地理解和分析日志。

用法示例

以下是一些常見的Loguru用法示例:

  1. 基本使用
from loguru import logger  # 記錄不同級別的日志  
logger.debug("這是一個調(diào)試消息")  
logger.info("這是一個信息消息")  
logger.success("這是一個成功消息")  
logger.warning("這是一個警告消息")  
logger.error("這是一個錯誤消息")  
logger.critical("這是一個關(guān)鍵錯誤消息")
  1. 日志輸出到文件
from loguru import logger  # 添加一個日志文件輸出,并設(shè)置輪轉(zhuǎn)(文件大小達到500MB時輪轉(zhuǎn))  
logger.add("file.log", rotation="500 MB")  
logger.info("這條消息將會記錄到文件中")
  1. 日志格式化
from loguru import logger  # 設(shè)置日志格式  
logger.add("file.log", format="{time} {level} {message}", rotation="500 MB")  
logger.info("這是一條格式化的日志消息")
  1. 日志過濾
from loguru import logger  # 過濾某個級別的日志  
logger.add("file.log", filter=lambda record: record["level"].name == "INFO")  
logger.debug("這條消息不會被記錄")  
logger.info("這條消息會被記錄")  
logger.warning("這條消息也不會被記錄")
  1. 異步日志
from loguru import logger  
import asyncio  # 添加異步日志處理  
logger.add("async_file.log", enqueue=True)  async def main():  logger.info("這是一個異步日志消息")  await asyncio.sleep(1)  asyncio.run(main())
  1. 日志異常處理
from loguru import logger  def error_function():  x = 1 / 0  # 捕獲并記錄異常  try:  error_function()  
except ZeroDivisionError:  logger.exception("捕獲到一個除零錯誤")
  1. 添加上下文信息
from loguru import logger  # 使用logger.contextualize()添加上下文信息  
with logger.contextualize(user="user1"):  logger.info("用戶user1的日志消息")
  1. 日志文件輪轉(zhuǎn)與壓縮
from loguru import logger  # 每天創(chuàng)建一個新日志文件,保留7天,并將舊日志文件壓縮為ZIP格式  
logger.add("file_{time}.log", rotation="1 day", retention="7 days", compression="zip")

通過以上示例,可以看出Loguru提供了豐富且易于使用的日志記錄功能,適合各種規(guī)模的項目。無論是簡單的腳本還是復(fù)雜的應(yīng)用程序,Loguru都能提供方便的日志記錄功能,幫助開發(fā)者更好地管理和分析日志信息。

openpyxl==3.1.5 讀寫Excel

openpyxl是一個流行的Python庫,用于讀寫Excel 2007及更新版本的.xlsx文件。它能夠處理Excel文件的創(chuàng)建、修改、讀取等操作,并且支持Excel的許多高級功能,如公式、圖表、條件格式、篩選等。以下是openpyxl庫的功能介紹和用法示例:

功能介紹

  1. 讀取和寫入Excel文件
  • 可以讀取已存在的Excel文件。
  • 可以創(chuàng)建新的Excel文件。
  • 支持對單元格、行、列進行讀寫操作。
  1. 操作工作表
  • 可以添加、刪除、獲取工作表。
  • 可以對工作表進行重命名。
  1. 公式與表達式
  • 支持在單元格中使用公式。
  • 注意,openpyxl不會自動計算公式的結(jié)果,只會保存公式。要查看公式的計算結(jié)果,通常需要打開Excel或使用支持計算公式的庫。
  1. 樣式和格式化
  • 可以對單元格進行樣式設(shè)置,包括字體、顏色、邊框、對齊等。
  • 支持設(shè)置列寬、行高。
  1. 圖表與圖像
  • 支持創(chuàng)建和插入圖表,如柱狀圖、折線圖等。
  • 可以在工作表中添加圖像。
  1. 數(shù)據(jù)驗證
  • 可以為單元格設(shè)置數(shù)據(jù)驗證,以確保用戶輸入的數(shù)據(jù)滿足特定的條件。
  1. 其他功能
  • 支持合并和取消合并單元格。
  • 支持保護和解保護工作表。
  • 可以處理日期和時間格式。
  • 支持設(shè)置打印選項,如頁邊距、頁眉和頁腳、紙張大小和方向等。
  • 支持凍結(jié)窗格,這樣在滾動工作表時,某些行或列可以保持不動。

用法示例

  1. 安裝openpyxl

使用pip進行安裝:

pip install openpyxl
  1. 創(chuàng)建和保存Excel文件
from openpyxl import Workbook  # 創(chuàng)建一個新的工作簿  
workbook = Workbook()  
# 獲取默認的工作表  
sheet = workbook.active  
# 給工作表命名  
sheet.title = "MySheet"  
# 寫入數(shù)據(jù)到單元格  
sheet['A1'] = "Hello"  
sheet['B1'] = "World"  
# 保存工作簿  
workbook.save("example.xlsx")
  1. 打開和讀取Excel文件
from openpyxl import load_workbook  # 加載已有的工作簿  
workbook = load_workbook("example.xlsx")  
# 獲取活動的工作表  
sheet = workbook.active  
# 讀取單元格的數(shù)據(jù)  
a1_value = sheet['A1'].value  
b1_value = sheet['B1'].value  
print(f"A1: {a1_value}, B1: {b1_value}")
  1. 操作工作表
# 創(chuàng)建一個新的工作表  
new_sheet = workbook.create_sheet(title="NewSheet")  
# 刪除一個工作表  
workbook.remove(new_sheet)  
# 獲取所有工作表的名稱  
sheetnames = workbook.sheetnames  
print(sheetnames)
  1. 設(shè)置單元格樣式
from openpyxl.styles import Font, Color, Alignment, PatternFill, Border, Side  # 設(shè)置字體樣式  
font = Font(name='Arial', size=14, bold=True, color='FF0000')  
sheet['A1'].font = font  
# 設(shè)置單元格對齊  
sheet['A1'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)  
# 設(shè)置單元格顏色  
fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")  
sheet['B2'].fill = fill  
# 設(shè)置邊框樣式  
border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))  
sheet['C3'].border = border
  1. 插入圖表
from openpyxl.chart import BarChart, Reference  # 創(chuàng)建一個柱狀圖  
chart = BarChart()  
data = Reference(sheet, min_col=1, min_row=1, max_col=2, max_row=2)  
chart.add_data(data, titles_from_data=True)  
# 插入圖表到工作表  
sheet.add_chart(chart, "E5")
  1. 添加圖像
from openpyxl.drawing.image import Image  img = Image('image_file.png')  
sheet.add_image(img, 'A1')  # 在A1單元格位置添加圖像
  1. 數(shù)據(jù)驗證
from openpyxl.worksheet.datavalidation import DataValidation  dv = DataValidation(type="whole", operator="between", formula1=1, formula2=100)  
sheet.add_data_validation(dv)  # 添加數(shù)據(jù)驗證

這些示例展示了openpyxl庫的一些基本功能。實際上,openpyxl還提供了許多其他的功能,如排序和過濾數(shù)據(jù)、設(shè)置條件格式等,可以根據(jù)需要進行學習和使用。

pandas==2.2.2 數(shù)據(jù)分析工具

Pandas是一個強大的Python數(shù)據(jù)分析工具,用于處理和分析結(jié)構(gòu)化數(shù)據(jù)。它提供了高性能、易于使用的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,使數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)分析和數(shù)據(jù)可視化變得更加簡單。以下是對Pandas庫的功能介紹和用法示例:

Pandas庫的功能介紹

  1. 數(shù)據(jù)結(jié)構(gòu)
  • Pandas提供了兩種主要的數(shù)據(jù)結(jié)構(gòu):Series和DataFrame。Series是一維標記數(shù)組,類似于帶有標簽的數(shù)組;而DataFrame是二維標記數(shù)據(jù)結(jié)構(gòu),類似于表格,可以容納多個Series。
  1. 數(shù)據(jù)讀寫
  • Pandas可以讀取和寫入多種數(shù)據(jù)格式,如CSV、Excel、SQL數(shù)據(jù)庫、JSON、HDF5等,方便用戶進行數(shù)據(jù)導入和導出操作。
  1. 數(shù)據(jù)清洗和轉(zhuǎn)換
  • Pandas提供了豐富的數(shù)據(jù)清洗和轉(zhuǎn)換功能,包括數(shù)據(jù)過濾、排序、刪除重復(fù)值、填充缺失值、數(shù)據(jù)合并和重塑等操作。
  1. 數(shù)據(jù)分析
  • Pandas提供了各種統(tǒng)計、聚合和分組操作,可以幫助用戶快速進行數(shù)據(jù)分析和匯總。
  1. 數(shù)據(jù)可視化
  • Pandas可以與其他數(shù)據(jù)可視化庫(如Matplotlib和Seaborn)結(jié)合使用,方便用戶進行數(shù)據(jù)可視化分析,生成各種圖表和圖形。

Pandas庫的用法示例

  1. 數(shù)據(jù)導入
import pandas as pd  # 從CSV文件導入數(shù)據(jù)  
df_csv = pd.read_csv('data.csv')  # 從Excel文件導入數(shù)據(jù)  
df_excel = pd.read_excel('data.xlsx')  # 從數(shù)據(jù)庫導入數(shù)據(jù)  
import sqlite3  
conn = sqlite3.connect('database.db')  
query = 'SELECT * FROM table_name'  
df_db = pd.read_sql(query, conn)
  1. 數(shù)據(jù)導出
# 將數(shù)據(jù)保存為CSV文件  
df.to_csv('output.csv', index=False)  # 將數(shù)據(jù)保存為Excel文件  
df.to_excel('output.xlsx', index=False)  # 將數(shù)據(jù)保存到數(shù)據(jù)庫  
df.to_sql('table_name', conn, if_exists='replace', index=False)
  1. 數(shù)據(jù)查看
# 查看數(shù)據(jù)頭部  
print(df.head())  # 查看數(shù)據(jù)尾部  
print(df.tail())  # 查看數(shù)據(jù)摘要統(tǒng)計信息  
print(df.describe())
  1. 數(shù)據(jù)篩選
# 根據(jù)條件篩選數(shù)據(jù)  
filtered_df = df[df['column_name'] > 10]  # 根據(jù)索引篩選數(shù)據(jù)  
selected_df = df.loc[1:5]  # 根據(jù)列名篩選數(shù)據(jù)  
selected_columns_df = df[['column1', 'column2']]
  1. 數(shù)據(jù)處理
# 數(shù)據(jù)清洗(去除空白字符)  
df['column_name'] = df['column_name'].str.strip()  # 缺失值處理(刪除包含缺失值的行)  
df.dropna(inplace=True)  # 重復(fù)值處理(刪除重復(fù)行)  
df.drop_duplicates(inplace=True)
  1. 數(shù)據(jù)分組與聚合
# 按列進行分組并計算平均值  
grouped_df = df.groupby('column_name').mean()  # 多列分組并計算總和  
grouped_df = df.groupby(['column1', 'column2']).sum()
  1. 數(shù)據(jù)可視化(結(jié)合Matplotlib庫)
import matplotlib.pyplot as plt  # 繪制折線圖  
df['column_name'].plot(kind='line')  
plt.xlabel('X軸標簽')  
plt.ylabel('Y軸標簽')  
plt.title('折線圖示例')  
plt.show()

(注意:在使用上述代碼時,請確保已經(jīng)安裝了pandas和matplotlib庫,并且數(shù)據(jù)源文件或數(shù)據(jù)庫連接信息是正確的。)

綜上所述,Pandas庫提供了豐富的數(shù)據(jù)處理和分析功能,能夠幫助用戶高效地處理和分析數(shù)據(jù)。通過掌握Pandas庫的基本用法和高級功能,用戶可以更好地利用Python進行數(shù)據(jù)分析和可視化工作。

passlib[bcrypt]==1.7.4 密碼的安全存儲和驗證

Passlib是一個強大的Python庫,專門用于密碼的安全存儲和驗證。它提供了多種密碼哈希算法和安全存儲方法的實現(xiàn),旨在提供簡單易用的API,同時保證密碼的安全性,抵御常見的密碼攻擊如彩虹表攻擊、暴力破解等。以下是對Passlib庫的功能介紹和用法示例:

Passlib庫的功能介紹

  1. 密碼哈希
  • Passlib支持多種哈希算法,包括但不限于SHA-256、SHA-512、bcrypt、PBKDF2等。這些算法都是經(jīng)過廣泛認可和安全驗證的,能夠有效保護密碼的安全性。
  1. 密碼驗證
  • Passlib提供了驗證哈希密碼的功能,允許用戶將輸入的明文密碼與存儲的哈希密碼進行比較,以驗證密碼的正確性。
  1. 密碼強度評估
  • Passlib還能夠評估密碼的強度,幫助用戶判斷密碼是否符合安全要求。
  1. 密碼策略管理
  • Passlib允許用戶定義密碼策略,以確保密碼的復(fù)雜性和安全性。用戶可以設(shè)置密碼的最小長度、最大長度、允許的字符集等策略要求。
  1. 常量時間比較
  • Passlib提供了常量時間比較功能,這有助于防止時序攻擊。在比較兩個字符串時,即使其中一個字符串是密碼,也能夠確保比較操作的時間復(fù)雜度是恒定的,從而避免泄露密碼信息。

Passlib庫的用法示例

  1. 安裝Passlib

    要使用Passlib庫,首先需要安裝它??梢允褂胮ip命令進行安裝:

    pip install passlib
    
  2. 生成和驗證密碼哈希

    以下是一個使用bcrypt算法生成和驗證密碼哈希的示例:

    from passlib.hash import bcrypt  # 生成一個安全的密碼哈希  
    password = 'my_password'  
    hash_object = bcrypt.hash(password, bcrypt.gensalt())  
    hashed_password = hash_object  # bcrypt.hash()返回的是一個包含哈希值和鹽值的對象,可以直接存儲  # 驗證密碼  
    input_password = 'my_password'  
    if bcrypt.verify(input_password, hashed_password):  print('Password is valid!')  
    else:  print('Password is not valid!')
    

    注意:在上面的代碼中,bcrypt.hash()函數(shù)返回的是一個包含哈希值和鹽值的對象,通常可以直接存儲為字符串形式。在驗證密碼時,使用bcrypt.verify()函數(shù)將輸入的明文密碼與存儲的哈希密碼進行比較。

  3. 評估密碼強度

    以下是一個評估密碼強度的示例(注意:Passlib本身不直接提供通用的密碼強度評估函數(shù),但可以通過其他方式實現(xiàn)或結(jié)合其他庫進行評估):

    # 假設(shè)這里有一個簡單的密碼強度評估函數(shù)(非Passlib提供)  
    def calculate_strength(password):  # 這是一個簡單的示例函數(shù),僅用于演示  length = len(password)  has_digit = any(char.isdigit() for char in password)  has_upper = any(char.isupper() for char in password)  has_lower = any(char.islower() for char in password)  strength = length + (has_digit * 1) + (has_upper * 1) + (has_lower * 1)  return strength  input_password = 'my_password'  
    strength = calculate_strength(input_password)  
    print(f'Password strength: {strength}')
    

    (注意:上面的calculate_strength函數(shù)是一個簡單的示例,用于演示如何評估密碼強度。在實際應(yīng)用中,可能需要使用更復(fù)雜的算法和規(guī)則來評估密碼強度。)

  4. 定義密碼策略

    以下是一個使用CryptContext對象定義密碼策略并生成哈希的示例:

    from passlib.context import CryptContext  # 創(chuàng)建一個密碼策略上下文  
    pwd_context = CryptContext(  schemes=['bcrypt'],  # 指定使用的哈希算法  default='bcrypt',    # 設(shè)置默認哈希算法  bcrypt__default_rounds=12  # 設(shè)置bcrypt算法的默認加密輪數(shù)  
    )  # 生成一個符合策略要求的密碼哈希  
    password = 'my_secret_password'  
    hashed_password = pwd_context.hash(password)  
    print(f'Hashed password: {hashed_password}')  # 驗證密碼是否符合策略要求  
    input_password = 'my_secret_password'  
    if pwd_context.verify(input_password, hashed_password):  print('Password is correct!')  
    else:  print('Password is incorrect!')
    

通過上述示例,您可以了解到如何在Python應(yīng)用中使用Passlib庫來安全地處理密碼。Passlib庫提供了多種哈希算法、密碼驗證、密碼強度評估(需要額外實現(xiàn)或結(jié)合其他庫)和密碼策略管理等高級特性,是處理用戶密碼的理想選擇。

Pillow==10.4.0 圖像處理庫

Pillow是Python中一個非常流行的圖像處理庫,它提供了豐富的功能,使得開發(fā)者能夠方便地對圖像進行各種操作。以下是Pillow庫的功能介紹和用法示例:

Pillow庫的功能介紹

  1. 圖像打開和保存
    • Pillow庫可以打開和保存多種格式的圖像文件,包括常見的JPEG、PNG、BMP、GIF等格式。
  2. 圖像縮放和裁剪
    • 提供了方便的圖像縮放和裁剪功能,允許用戶根據(jù)指定的尺寸或區(qū)域?qū)D像進行調(diào)整。
  3. 圖像旋轉(zhuǎn)和翻轉(zhuǎn)
    • 支持圖像的旋轉(zhuǎn)和翻轉(zhuǎn)操作,可以指定旋轉(zhuǎn)角度和翻轉(zhuǎn)方式。
  4. 圖像格式轉(zhuǎn)換
    • 可以將圖像轉(zhuǎn)換為不同的格式,并保存為新的文件。
  5. 圖像濾鏡和特效
    • 提供了多種圖像濾鏡和特效功能,如模糊、銳化、噪聲、漸變等,以增強圖像效果。
  6. 圖像分析
    • 可以用于圖像分析,例如獲取圖像的直方圖,以便分析圖像的色彩分布。
  7. 圖像合成
    • 支持將多張圖像合成為一張,例如通過透明度混合、疊加等方式。
  8. 圖像繪制
    • 提供了在圖像上繪制文本、形狀等功能,允許用戶在圖像上進行自定義的標注和編輯。
  9. 圖像像素訪問和修改
    • 允許用戶訪問和修改圖像的像素數(shù)據(jù),以實現(xiàn)更精細的圖像處理操作。

Pillow庫的用法示例

  1. 安裝Pillow庫

    要使用Pillow庫,首先需要安裝它??梢允褂胮ip命令進行安裝:

    pip install pillow
    
  2. 加載和顯示圖像

    from PIL import Image  # 加載圖像  
    image = Image.open('path_to_your_image.jpg')  # 顯示圖像  
    image.show()
    
  3. 轉(zhuǎn)換圖像模式

    將圖像從RGB模式轉(zhuǎn)換為灰度模式:

    from PIL import Image  # 加載圖像  
    image = Image.open('path_to_your_image.jpg')  # 轉(zhuǎn)換為灰度圖像  
    gray_image = image.convert('L')  # 顯示灰度圖像  
    gray_image.show()
    
  4. 調(diào)整圖像大小

    from PIL import Image  # 加載圖像  
    image = Image.open('path_to_your_image.jpg')  # 調(diào)整大小  
    resized_image = image.resize((800, 600))  # 顯示調(diào)整大小后的圖像  
    resized_image.show()
    
  5. 旋轉(zhuǎn)圖像

    from PIL import Image  # 加載圖像  
    image = Image.open('path_to_your_image.jpg')  # 旋轉(zhuǎn)圖像(45度)  
    rotated_image = image.rotate(45)  # 顯示旋轉(zhuǎn)后的圖像  
    rotated_image.show()
    
  6. 裁剪圖像

    from PIL import Image  # 加載圖像  
    image = Image.open('path_to_your_image.jpg')  # 裁剪圖像(左上角坐標和右下角坐標)  
    cropped_image = image.crop((100, 100, 400, 400))  # 顯示裁剪后的圖像  
    cropped_image.show()
    
  7. 保存圖像

    將處理后的圖像保存到文件:

    from PIL import Image  # 加載圖像  
    image = Image.open('path_to_your_image.jpg')  # 轉(zhuǎn)換為灰度圖像  
    gray_image = image.convert('L')  # 保存灰度圖像  
    gray_image.save('gray_image.jpg')
    
  8. 繪制圖像

    在圖像上繪制文本或形狀:

    from PIL import Image, ImageDraw, ImageFont  # 創(chuàng)建一個新的白色圖像  
    image = Image.new('RGB', (200, 100), color=(255, 255, 255))  # 獲取繪圖對象  
    draw = ImageDraw.Draw(image)  # 定義字體(確保路徑正確)  
    font = ImageFont.truetype("arial.ttf", 36)  # 繪制黑色文本  
    draw.text((10, 10), "Hello", fill=(0, 0, 0), font=font)  # 繪制一個紅色矩形  
    draw.rectangle([(50, 10), (150, 90)], outline=(255, 0, 0))  # 顯示圖像(注意:這里沒有直接顯示的方法,需要保存到文件或使用其他方式顯示)  
    image.save('drawn_image.png')  
    # 或者使用 image.show() 方法(如果環(huán)境支持)
    
  9. 處理圖像像素

    訪問和修改圖像的像素:

    from PIL import Image  # 加載圖像  
    image = Image.open('path_to_your_image.jpg')  # 轉(zhuǎn)換為RGB模式(如果不是的話)  
    image = image.convert('RGB')  # 獲取圖像的像素數(shù)據(jù)  
    pixels = image.load()  # 修改像素(例如,將圖像的中心像素設(shè)置為紅色)  
    width, height = image.size  
    pixels[width // 2, height // 2] = (255, 0, 0)  # 顯示修改后的圖像  
    image.show()
    

通過上述示例,您可以了解到如何在Python應(yīng)用中使用Pillow庫來進行圖像處理。Pillow庫提供了豐富的功能,使得開發(fā)者能夠方便地進行圖像的打開、保存、縮放、裁剪、旋轉(zhuǎn)、格式轉(zhuǎn)換、濾鏡應(yīng)用、分析、合成和繪制等操作。無論是簡單的圖像處理任務(wù)還是復(fù)雜的圖像編輯需求,Pillow庫都能夠提供有效的支持。

psutil==6.0.0 獲取系統(tǒng)進程和系統(tǒng)資源的利用率

psutil是一個跨平臺的Python庫,它提供了方便的方式來獲取系統(tǒng)運行的進程和系統(tǒng)資源(包括CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等)的利用率信息。以下是對psutil庫的功能介紹和用法示例:

功能介紹

  1. 獲取CPU信息
    • 可以獲取CPU的邏輯核心數(shù)、使用率等信息。
    • 支持獲取每個邏輯核心的單獨使用率,以及整體的平均使用率。
  2. 獲取內(nèi)存信息
    • 可以獲取系統(tǒng)的總內(nèi)存、已用內(nèi)存、空閑內(nèi)存等信息。
    • 支持獲取內(nèi)存的使用率、buffer和cache等詳細信息。
  3. 獲取磁盤信息
    • 可以獲取指定路徑的磁盤使用情況,包括總空間、已用空間和可用空間等。
    • 支持獲取磁盤的I/O統(tǒng)計信息,如讀寫速度、讀寫次數(shù)等。
  4. 獲取網(wǎng)絡(luò)信息
    • 可以獲取網(wǎng)絡(luò)接口的統(tǒng)計信息,包括發(fā)送和接收的數(shù)據(jù)量、錯誤數(shù)等。
    • 支持獲取網(wǎng)絡(luò)連接的信息,如連接狀態(tài)、遠程地址和端口等。
  5. 獲取進程信息
    • 可以獲取系統(tǒng)中運行的所有進程的信息,包括進程名、PID、父進程PID、啟動時間等。
    • 支持獲取指定進程的詳細信息,如CPU使用率、內(nèi)存使用率、線程數(shù)等。
    • 可以對進程進行監(jiān)控和管理,如獲取進程的打開文件、網(wǎng)絡(luò)連接等信息。

用法示例

  1. 安裝psutil庫

    要使用psutil庫,首先需要安裝它??梢允褂胮ip命令進行安裝:

    pip install psutil
    
  2. 獲取CPU信息

    import psutil  # 獲取CPU邏輯核心數(shù)  
    cpu_count = psutil.cpu_count()  
    print(f'CPU邏輯核心數(shù): {cpu_count}')  # 獲取CPU使用率(整體平均使用率)  
    cpu_percent = psutil.cpu_percent(interval=1)  
    print(f'CPU使用率: {cpu_percent}%')  # 獲取每個邏輯核心的單獨使用率  
    per_cpu_percent = psutil.cpu_percent(interval=1, percpu=True)  
    print(f'每個邏輯核心的CPU使用率: {per_cpu_percent}')
    
  3. 獲取內(nèi)存信息

    import psutil  # 獲取內(nèi)存信息  
    mem_info = psutil.virtual_memory()  
    print(f'總內(nèi)存: {mem_info.total / (1024**3):.2f} GB')  
    print(f'已用內(nèi)存: {mem_info.used / (1024**3):.2f} GB')  
    print(f'空閑內(nèi)存: {mem_info.available / (1024**3):.2f} GB')  
    print(f'內(nèi)存使用率: {mem_info.percent}%')
    
  4. 獲取磁盤信息

    import psutil  # 獲取根目錄的磁盤使用情況  
    disk_usage = psutil.disk_usage('/')  
    print(f'總磁盤空間: {disk_usage.total / (1024**3):.2f} GB')  
    print(f'已用磁盤空間: {disk_usage.used / (1024**3):.2f} GB')  
    print(f'可用磁盤空間: {disk_usage.free / (1024**3):.2f} GB')  
    print(f'磁盤使用率: {disk_usage.percent}%')
    
  5. 獲取網(wǎng)絡(luò)信息

    import psutil  # 獲取網(wǎng)絡(luò)接口的統(tǒng)計信息  
    net_io = psutil.net_io_counters()  
    print(f'發(fā)送數(shù)據(jù)量: {net_io.bytes_sent / (1024**2):.2f} MB')  
    print(f'接收數(shù)據(jù)量: {net_io.bytes_recv / (1024**2):.2f} MB')  # 獲取網(wǎng)絡(luò)連接的信息(示例:獲取所有TCP連接)  
    tcp_connections = psutil.net_connections(kind='tcp')  
    for conn in tcp_connections:  print(f'連接狀態(tài): {conn.status}, 遠程地址: {conn.laddr.ip}:{conn.laddr.port} -> {conn.raddr.ip}:{conn.raddr.port}')
    
  6. 獲取進程信息

    import psutil  # 獲取所有進程信息  
    for proc in psutil.process_iter():  try:  # 獲取進程名稱和PID  name = proc.name()  pid = proc.pid()  print(f'名稱: {name}, PID: {pid}')  # 獲取進程的詳細信息(示例:CPU和內(nèi)存使用率)  cpu_percent = proc.cpu_percent(interval=1)  memory_info = proc.memory_info()  print(f'  CPU使用率: {cpu_percent}%')  print(f'  內(nèi)存使用量: {memory_info.rss / (1024**2):.2f} MB')  except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):  pass
    

通過上述示例,您可以了解到如何在Python應(yīng)用中使用psutil庫來獲取系統(tǒng)資源的使用情況和進程信息。psutil庫提供了豐富的功能,使得開發(fā)者能夠方便地進行系統(tǒng)監(jiān)控、性能分析和進程管理。無論是簡單的系統(tǒng)信息查詢還是復(fù)雜的性能監(jiān)控需求,psutil庫都能夠提供有效的支持。

PyJWT[crypto]==2.8.0 處理JSON Web Tokens(JWT)

PyJWT是一個用于處理JSON Web Tokens(JWT)的Python庫,它提供了豐富的功能和靈活性,能夠輕松地在Python應(yīng)用程序中實現(xiàn)JWT的創(chuàng)建、解析和驗證。以下是對PyJWT庫的功能介紹和用法示例:

功能介紹

  1. 創(chuàng)建JWT:PyJWT允許用戶定義載荷(Payload),并選擇算法(Algorithm)來生成JWT。載荷通常包含用戶ID、權(quán)限等聲明信息,而算法則用于生成和驗證簽名的安全性。
  2. 解析JWT:PyJWT可以解析JWT字符串,提取其中的載荷信息。這通常用于驗證JWT的有效性,并獲取其中的用戶信息。
  3. 驗證JWT:除了解析JWT外,PyJWT還可以驗證JWT的簽名和完整性,以確保JWT在傳輸過程中沒有被篡改。
  4. 自定義過期時間:PyJWT允許用戶自定義JWT的過期時間,以滿足特定的需求。在解析JWT時,可以檢查其過期時間,并根據(jù)情況進行處理。
  5. 支持多種加密算法:PyJWT支持多種加密算法,如HS256、RS256等。用戶可以根據(jù)需求和安全性要求選擇不同的加密算法。
  6. 刷新令牌:當JWT過期但用戶仍在操作時,可以使用刷新令牌的方法來延長JWT的有效期。

用法示例

1. 安裝PyJWT

要使用PyJWT,首先需要安裝它??梢允褂胮ip來安裝:

pip install PyJWT
2. 創(chuàng)建JWT

下面是一個創(chuàng)建JWT的示例:

import jwt  
import datetime  
from datetime import timedelta  # 定義載荷(Payload)  
payload = {  'user_id': 123,  'exp': datetime.utcnow() + timedelta(minutes=30)  # 設(shè)置過期時間  
}  # 生成JWT  
token = jwt.encode(payload, 'secret', algorithm='HS256')  
print(token)
3. 解析JWT

下面是一個解析JWT的示例:

import jwt  # 要解析的JWT  
token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...(此處為示例,實際應(yīng)為生成的token字符串)'  # 解析JWT  
payload = jwt.decode(token, 'secret', algorithms=['HS256'])  
print(payload['user_id'])
4. 驗證JWT

下面是一個驗證JWT的示例:

import jwt  # 要驗證的JWT  
token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...(此處為示例,實際應(yīng)為生成的token字符串)'  try:  # 驗證JWT  payload = jwt.decode(token, 'secret', algorithms=['HS256'])  print("JWT驗證成功!")  
except jwt.InvalidTokenError:  print("JWT驗證失敗!")
5. 自定義過期時間處理邏輯

下面是一個自定義過期時間處理邏輯的示例:

import jwt  
import datetime  
from datetime import timedelta  def custom_expired_handler(token):  # 解析JWT,不驗證過期時間  payload = jwt.decode(token, 'secret', algorithms=['HS256'], options={'verify_exp': False})  # 獲取過期時間  exp_time = datetime.utcfromtimestamp(payload['exp'])  # 檢查過期時間  if exp_time < datetime.utcnow():  print("Token 已過期")  else:  print("Token 未過期")  # 要解析的JWT  
token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...(此處為示例,實際應(yīng)為生成的token字符串)'  
custom_expired_handler(token)
6. 選擇加密算法

下面是一個選擇不同加密算法生成JWT的示例:

import jwt  # 定義載荷(Payload)  
payload = {'user_id': 123}  # 選擇RS256加密算法  
token_rs256 = jwt.encode(payload, 'secret', algorithm='RS256')  
print("RS256 Token:", token_rs256)  # 選擇HS256加密算法  
token_hs256 = jwt.encode(payload, 'secret', algorithm='HS256')  
print("HS256 Token:", token_hs256)
7. 刷新令牌

下面是一個刷新令牌的示例:

import jwt  
import datetime  
from datetime import timedelta  # 定義載荷(Payload)并生成初始令牌  
payload = {'user_id': 123, 'exp': datetime.utcnow() + timedelta(minutes=30)}  
token = jwt.encode(payload, 'secret', algorithm='HS256')  
print("初始令牌:", token)  # 刷新令牌  
new_payload = jwt.decode(token, 'secret', algorithms=['HS256'])  
new_payload['exp'] = datetime.utcnow() + timedelta(hours=1)  
new_token = jwt.encode(new_payload, 'secret', algorithm='HS256')  
print("刷新后的令牌:", new_token)

通過以上示例,您可以了解PyJWT庫的基本功能和用法。在實際應(yīng)用中,您可以根據(jù)具體需求靈活使用PyJWT來創(chuàng)建、解析和驗證JWT,以實現(xiàn)安全的身份驗證和信息傳輸。

user-agents==2.2.0 解析user agent字符串

功能介紹

Python user-agents庫是一個專為解析user agent字符串而設(shè)計的工具。它能夠輕松識別訪問設(shè)備的類型(如移動設(shè)備、桌面設(shè)備或平板),并獲取設(shè)備、瀏覽器、操作系統(tǒng)等詳細信息。借助它,開發(fā)者可以更好地了解訪問用戶的設(shè)備屬性,為不同設(shè)備提供定制化體驗。該庫具有以下主要特點:

  1. 設(shè)備識別:能夠識別并分類設(shè)備類型,如手機、平板、PC等。
  2. 瀏覽器和操作系統(tǒng)信息提取:可以提取出用戶代理字符串中的瀏覽器類型和版本、操作系統(tǒng)類型和版本等信息。
  3. 高級屬性判斷:提供了一些高級屬性判斷,如是否為觸摸屏設(shè)備、是否為移動設(shè)備、是否為爬蟲等。
  4. 批量解析:支持批量解析多個user agent字符串,提高解析效率。
  5. 易用性和準確性:直觀的API設(shè)計讓開發(fā)者快速上手,同時依托強大的ua-parser解析引擎,實現(xiàn)高效精準的設(shè)備識別。

用法示例

以下是一些使用Python user-agents庫的示例代碼:

  1. 安裝庫

    首先,你需要通過pip安裝Python user-agents庫:

    pip install pyyaml ua-parser user-agents
    
  2. 簡單解析示例

    from user_agents import parse  ua_string = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15'  
    user_agent = parse(ua_string)  # 輸出設(shè)備信息  
    print(f"設(shè)備類型: {user_agent.device.family}, 品牌: {user_agent.device.brand}, 型號: {user_agent.device.model}")  
    # 輸出操作系統(tǒng)信息  
    print(f"操作系統(tǒng): {user_agent.os.family} {user_agent.os.version_string}")  
    # 輸出瀏覽器信息  
    print(f"瀏覽器: {user_agent.browser.family} {user_agent.browser.version_string}")
    

    輸出結(jié)果:

    設(shè)備類型: iphone, 品牌: apple, 型號: None  
    操作系統(tǒng): ios 13.5  
    瀏覽器: mobile safari 13.1
    
  3. 判斷設(shè)備類型

    from user_agents import parse  ua_string = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15'  
    user_agent = parse(ua_string)  # 判斷設(shè)備類型  
    print(f"是否為移動設(shè)備: {user_agent.is_mobile}")  
    print(f"是否為平板: {user_agent.is_tablet}")  
    print(f"是否為PC端: {user_agent.is_pc}")  
    print(f"是否為爬蟲機器人: {user_agent.is_bot}")
    

    輸出結(jié)果:

    是否為移動設(shè)備: True  
    是否為平板: False  
    是否為PC端: False  
    是否為爬蟲機器人: False
    
  4. 批量解析示例

    from user_agents import parse  user_agents = [  'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',  'Mozilla/5.0 (iPad; CPU OS 14_0 like Mac OS X)',  'Mozilla/5.0 (Linux; Android 10; SM-G973F)',  'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'  
    ]  for ua_string in user_agents:  user_agent = parse(ua_string)  print(f"User-Agent: {ua_string}")  print(f"設(shè)備類型: {user_agent.device.family}")  print(f"操作系統(tǒng): {user_agent.os.family} {user_agent.os.version_string}")  print(f"是否為移動設(shè)備: {user_agent.is_mobile}")  print(f"是否為爬蟲: {user_agent.is_bot}")  print()
    

    該代碼將批量解析每個user agent字符串,并輸出每個設(shè)備的詳細信息。

通過以上示例,你可以看到Python user-agents庫在解析user agent字符串、提取設(shè)備信息、判斷設(shè)備類型等方面的強大功能。它能夠幫助開發(fā)者更好地了解訪問用戶的設(shè)備屬性,從而提供更加定制化的服務(wù)和體驗。

waitress==3.0.0 高性能 WSGI服務(wù)器

功能介紹

Waitress 是一個用于 Python Web 開發(fā)的高性能 WSGI(WebServerGateway Interface)服務(wù)器,由 Zope Corporation 開發(fā)并維護。它專注于提供可靠的、高性能的 Web 服務(wù),并以其簡單、易用、可靠的設(shè)計理念而受到廣泛贊譽。Waitress 的核心亮點包括:

  1. 高性能:Waitress 支持多線程處理請求,能夠高效地處理高并發(fā)請求,確保 Web 應(yīng)用程序的穩(wěn)定性和性能。
  2. 兼容性:Waitress 完全符合 WSGI 規(guī)范,能夠與大多數(shù) Python Web 框架(如 Flask、Django、Pyramid 等)兼容,為用戶提供靈活的部署選項。
  3. 安全性:Waitress 支持 HTTPS,并提供了一些安全選項,如 SSL 證書和加密算法的配置,確保數(shù)據(jù)傳輸?shù)陌踩浴?/li>
  4. 日志記錄:Waitress 支持記錄請求日志,方便用戶了解請求的處理情況和性能表現(xiàn),有助于問題排查和性能優(yōu)化。
  5. 異常處理:Waitress 允許用戶自定義異常處理程序,以便捕獲和處理請求處理過程中的異常,提高應(yīng)用程序的健壯性。
  6. 插件系統(tǒng):Waitress 可以通過插件擴展其功能,例如添加身份驗證或負載均衡支持,滿足用戶多樣化的需求。

用法示例

以下是一個使用 Waitress 來運行 Python Web 應(yīng)用程序的示例:

  1. 安裝 Waitress

    首先,你需要通過 pip 安裝 Waitress 庫:

    pip install waitress
    
  2. 創(chuàng)建 Web 應(yīng)用程序

    接下來,你需要創(chuàng)建一個符合 WSGI 規(guī)范的 Python Web 應(yīng)用程序。以下是一個簡單的 Flask 應(yīng)用程序示例:

    # app.py  
    from flask import Flask  app = Flask(__name__)  @app.route('/')  
    def hello_world():  return 'Hello, World!'
    
  3. 運行 Waitress 服務(wù)器

    最后,你可以使用 Waitress 來運行你的 Web 應(yīng)用程序:

    # run.py  
    from waitress import serve  
    from app import app  if __name__ == '__main__':  serve(app, host='0.0.0.0', port=8080, threads=4)
    

    在上面的代碼中,我們導入了 Waitress 的 serve 函數(shù),并將我們的 Flask 應(yīng)用程序 app 作為參數(shù)傳遞給它。同時,我們指定了服務(wù)器的主機地址(host='0.0.0.0' 表示監(jiān)聽所有可用的網(wǎng)絡(luò)接口)和端口號(port=8080),以及要使用的線程數(shù)(threads=4)。

  4. 啟動服務(wù)器

    運行 run.py 文件,Waitress 服務(wù)器將啟動并監(jiān)聽指定的端口。現(xiàn)在,你可以通過瀏覽器訪問 http://localhost:8080/ 來查看你的 Web 應(yīng)用程序。

高級用法

除了基本功能之外,Waitress 還提供了一些高級功能,使得用戶能夠更靈活地定制服務(wù)器行為:

  1. 自定義中間件:Waitress 支持自定義中間件,使用戶能夠在請求處理過程中添加額外的邏輯。
  2. 自定義異常處理程序:用戶可以自定義異常處理程序來捕獲和處理請求處理過程中的異常。
  3. 配置安全選項:Waitress 支持 HTTPS,并提供了一些安全選項來配置 SSL 證書和加密算法。

以下是一個使用自定義中間件和異常處理程序的示例:

# custom_middleware.py  
from waitress import WSGIRequestHandler  class CustomMiddleware(WSGIRequestHandler):  def __call__(self, environ, start_response):  # 在這里添加自定義邏輯  print("Request received!")  # 調(diào)用原始的處理程序  return super().__call__(environ, start_response)  # custom_exception_handler.py  
def custom_exception_handler(environ, start_response):  # 在這里處理異常  start_response('500 Internal Server Error', [('Content-Type', 'text/plain')])  return [b'An error occurred.']  # run_advanced.py  
from waitress import serve  
from app import app  
from custom_middleware import CustomMiddleware  
from custom_exception_handler import custom_exception_handler  if __name__ == '__main__':  serve(app, host='0.0.0.0', port=8080, threads=4, middleware=[CustomMiddleware], exc_handler=custom_exception_handler)

在上面的代碼中,我們定義了一個自定義中間件 CustomMiddleware,它將在請求處理過程中添加額外的邏輯(例如打印請求接收的消息)。同時,我們還定義了一個自定義異常處理程序 custom_exception_handler,用于捕獲和處理請求處理過程中的異常。在啟動 Waitress 服務(wù)器時,我們將這些自定義組件作為參數(shù)傳遞給它。

通過以上介紹和示例代碼,你可以了解到 Waitress 庫的基本功能和高級用法。無論是在小型 Web 應(yīng)用程序還是生產(chǎn)環(huán)境中的大型應(yīng)用程序中,Waitress 都能為你提供可靠、高性能的 Web 服務(wù)支持。

http://www.risenshineclean.com/news/46594.html

相關(guān)文章:

  • 成都 商業(yè)網(wǎng)站建設(shè)app網(wǎng)絡(luò)推廣公司
  • 網(wǎng)站建設(shè) 樂視百度軟件中心下載安裝
  • 網(wǎng)站優(yōu)化推廣怎么做強強seo博客
  • 網(wǎng)站群系統(tǒng)站長工具網(wǎng)站排名
  • 湖州網(wǎng)站制作網(wǎng)站快速排名推廣軟件
  • 24小時二手表網(wǎng)站免費友情鏈接平臺
  • thinkphp做網(wǎng)站有什么好處seo網(wǎng)絡(luò)優(yōu)化平臺
  • 門戶網(wǎng)站是指網(wǎng)絡(luò)營銷方式有哪些
  • 南京h5網(wǎng)站開發(fā)seo根據(jù)什么具體優(yōu)化
  • 怎么查網(wǎng)站備案信息查詢運營是做什么的
  • 簡述企業(yè)網(wǎng)站建設(shè)的流程百度推廣培訓班
  • 網(wǎng)站優(yōu)化怎么做分錄西安seo優(yōu)化系統(tǒng)
  • 高端網(wǎng)站制作哪家專業(yè)怎樣免費推廣自己的網(wǎng)站
  • 簡單的個人網(wǎng)站100種宣傳方式
  • 網(wǎng)站建設(shè)模板的seo快速排名源碼
  • 三門峽建設(shè)網(wǎng)站哪家好深圳網(wǎng)絡(luò)推廣
  • 注冊公司后才可以做獨立網(wǎng)站嗎個人主頁網(wǎng)頁設(shè)計
  • 中國建設(shè)部官方網(wǎng)站魯班獎網(wǎng)絡(luò)推廣的方法包括
  • 四川城鄉(xiāng)建設(shè)委員會的網(wǎng)站深圳百度競價托管公司
  • 做網(wǎng)站的空間汽車行業(yè)網(wǎng)站建設(shè)
  • 大型o2o網(wǎng)站開發(fā)時間怎么建造自己的網(wǎng)站
  • 開網(wǎng)站買自己做的東西什么是淘寶seo
  • 河南建設(shè)廳八大員查詢網(wǎng)站搜索引擎優(yōu)化關(guān)鍵字
  • 紅鵲豆網(wǎng)絡(luò)網(wǎng)站站建設(shè)營銷思路八大要點
  • 怎樣給網(wǎng)站或者商品做推廣抖音seo軟件工具
  • 廈門做網(wǎng)站建設(shè)榜單優(yōu)化
  • 給一個裝修公司怎么做網(wǎng)站今日新聞播報
  • 用手機制作ppt的軟件seo站長綜合查詢工具
  • 哪種語言做的網(wǎng)站好seo診斷站長
  • 福州綠光網(wǎng)站建設(shè)工作室seo sem是啥