日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

【Python成长之路】共享平台

發(fā)布時(shí)間:2023/12/14 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python成长之路】共享平台 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

哈嘍大家好,我是鵬哥。

今天要記錄的是?——?基于python和Flask搭建一個(gè)共享平臺(tái)。

~~~上課鈴~~~

NUMBXXXTentacion?-???(Deluxe)?[Explicit]

1

寫在前面

之前在工作中,遇到一個(gè)問(wèn)題:有同事經(jīng)常需要我共享一些文件給他們。頻繁的共享操作,讓我不勝其煩。所以想到自己寫個(gè)共享平臺(tái),讓同事自己去拿。

當(dāng)然有人會(huì)說(shuō),window的文件夾共享一下不就行了嗎?哎呀,能用python解決的事情,絕對(duì)要裝下逼!不然我還怎么寫博客?另外,通過(guò)共享平臺(tái)有個(gè)好處是你可以知道哪個(gè)同事(控制臺(tái)會(huì)有IP信息打印)什么時(shí)候取了你的什么文件,有種一覽無(wú)遺的感覺(jué)。另外手機(jī)也可以一樣訪問(wèn)的喲。

2

效果展示

?

這里我用的共享平臺(tái)IP是127.0.0.1,對(duì)于工作中遇到時(shí)可以將IP地址設(shè)置成自己或者其他服務(wù)器的IP地址。

為了方便大家直接使用,我已將代碼上傳至GitHub網(wǎng)站,鏈接如下:

https://github.com/yuzipeng05/share_platform.git

使用指導(dǎo)如下:

通過(guò)python實(shí)現(xiàn)http局域網(wǎng)共享,通過(guò)共享平臺(tái)的簡(jiǎn)單操作進(jìn)行數(shù)據(jù)共享操作。使用前,只需要配置config.py文件中相關(guān)參數(shù),執(zhí)行main.py腳本即可 。

如:

# 設(shè)置共享路徑
share_path = 'F:\\Python成長(zhǎng)之路'
# 設(shè)置本地IP地址,127.0.0.1只有自己訪問(wèn)
ip = '127.0.0.1'
# 共享最大時(shí)長(zhǎng),默認(rèn)15min
MaxTime = 900
# 共享平臺(tái)的端口,若無(wú)沖突,可不用修改
share_port = 8000

3

知識(shí)串講(敲黑板啦)

(1)共享實(shí)現(xiàn)原理:

其實(shí)python可以通過(guò)以下命令,構(gòu)建http局域網(wǎng)從而實(shí)現(xiàn)所在路徑下的文件共享。

python -m http.server 8000

我也是通過(guò)os.chdir()進(jìn)入配置文件中的共享路徑,從而啟動(dòng)共享模式。但是這 里,我遇到幾個(gè)問(wèn)題:1、已經(jīng)共享的進(jìn)程如何去關(guān)閉;2、如何友好地與用戶進(jìn)行交互。

(2)共享進(jìn)程處理

因?yàn)樵趩?dòng)main.py后,共享進(jìn)程相當(dāng)于是我程序的一個(gè)子進(jìn)程,之前我對(duì)子進(jìn)程的管理不太熟悉。因此在網(wǎng)上查找學(xué)習(xí),發(fā)現(xiàn)subprocess模塊。對(duì)于此模塊的介紹,自行百度吧,網(wǎng)上資料還是蠻全的。我就簡(jiǎn)單介紹下我用到的2個(gè)方法

subprocess.Popen():啟動(dòng)共享子進(jìn)程

share_process.kill()?:進(jìn)行共享子進(jìn)程的停止

另外,我需要針對(duì)不同用戶啟動(dòng)的子進(jìn)程都統(tǒng)一管理(總不能A啟動(dòng)后,B不能停止吧?)。這里我用的是global將共享子進(jìn)程設(shè)置為全局變量,從而實(shí)現(xiàn)了進(jìn)程管理。這里我覺(jué)得其實(shí)應(yīng)該還有其他方法來(lái)實(shí)現(xiàn)多用戶對(duì)同一進(jìn)程的操作管理。

(3)用戶交互

其實(shí)我一開始想用QT5來(lái)開發(fā)個(gè)APP,但是想想,誰(shuí)要用你的APP。所以只好再次寫起了Flask框架。Flask框架本身是易用的,但是我對(duì)html或jquery是完全不懂,也沒(méi)興趣系統(tǒng)地學(xué)習(xí)。所以只好遇山開山,遇水搭橋。

這里 我遇到的主要是2個(gè)問(wèn)題:1、html如何調(diào)用入?yún)?#xff08;哈哈好簡(jiǎn)單的問(wèn)題,但是我是真不懂)2、控件的響應(yīng)

1、如何調(diào)用 入?yún)?#xff1a;{{XX}}即可,果然是好簡(jiǎn)單的問(wèn)題

2、控件的響應(yīng):這里我參考了網(wǎng)上大神們的寫法。

<script>(function(){$('input[id="start"]').on('click', function(){$('#share_status').html('<p id="share_status"><b>【當(dāng)前共享狀態(tài)】:正在共享中!</b></p>')$.ajax({type: "get",url: "/update_status",data: {"status":"1"},dataType: "json"});});})(); </script>

?

通過(guò)#ID?來(lái)定位p標(biāo)簽并修改共享狀態(tài)的html內(nèi)容;通過(guò)ajax進(jìn)行結(jié)果響應(yīng)。

4

示例代碼

main.py?主程序:

# coding=utf-8# @公眾號(hào) : "鵬哥賊優(yōu)秀"# @Date : 2020/3/14# @Software : PyCharm # @Python version: Python 3.7.2 from flask import Flask, render_template, requestfrom datebase import *import osimport subprocessimport timefrom config import * app = Flask(__name__) @app.route('/')def share_platform(): now_status = query() return render_template('share.html', status=now_status,share_path=share_path,share_website=share_website) @app.route('/update_status', methods=['get'])def update_status(): new_status = request.args.get('status') old_status = query() share = Share() if new_status == '1' and old_status != new_status: share.begin_share() return '已開啟共享!' elif new_status == '1' and old_status == new_status: return '已開啟共享!' elif new_status == '0' and old_status != new_status: print('即將關(guān)閉共享……') share.end_share() return '已停止共享!' else: return '已停止共享!' class Share(): def begin_share(self): update('1') os.chdir(share_path) start_time = time.time() global share_process share_process = subprocess.Popen('python -m http.server {0}'.format(share_port)) print('共享鏈接已打開!當(dāng)前時(shí)間為:', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())) while (time.time() - start_time) < MaxTime: pass self.end_share() def end_share(self): try: share_process.kill() except: print('共享鏈接已關(guān)閉,無(wú)法執(zhí)行kill命令!') print('共享鏈接已關(guān)閉!當(dāng)前時(shí)間為:', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())) update('0') if __name__ == '__main__':????app.run(debug=True,?host=ip,?port=5000)

????共享平臺(tái)的html模板:???????

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>共享平臺(tái)</title></head><body>{% if status == '1'%}<p id="share_status"><b>【當(dāng)前共享狀態(tài)】:正在共享中!</b></p>{% else%}<p id="share_status"><b>【當(dāng)前共享狀態(tài)】:未共享或者已取消共享!</b></p>{% endif %}<p>共享路徑為:{{share_path}}</p><input type="button" value="開始共享" id="start" style="background-color:#33FF33;"><br><br><a href={{share_website}}>在開啟共享后,請(qǐng)點(diǎn)擊此鏈接:{{share_website}}/share</a><br><br><input type="button" value="取消共享" id="end" style="background-color:#33FF33;"> <!-- Optional JavaScript --><!-- jQuery first, then Popper.js, then Bootstrap JS --><script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script><script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script><script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script> <script> (function(){ $('input[id="start"]').on('click', function(){ $('#share_status').html('<p id="share_status"><b>【當(dāng)前共享狀態(tài)】:正在共享中!</b></p>') $.ajax({ type: "get", url: "/update_status", data: {"status":"1"}, dataType: "json" }); }); })();</script><script> (function(){ $('input[id="end"]').on('click', function(){ $('#share_status').html('<p id="share_status"><b>【當(dāng)前共享狀態(tài)】:未共享或者已取消共享!</b></p>') $.ajax({ type: "get", url: "/update_status", data: {"status":"0"}, dataType: "json" }); }); })();</script></body></html>

5

寫在最后

年后以來(lái),我一直都沒(méi)有靜下心來(lái)寫博客了,把當(dāng)初寫公眾號(hào)信誓旦旦的“一周一更”目標(biāo)早就丟在路邊了。嘿嘿,給自己找找借口:工作變忙了、沒(méi)好的主題、疫情嚴(yán)重、周五沒(méi)有了咖啡、王者打多了、關(guān)注人數(shù)太少……

好吧,其實(shí)是我自己變懶了,怠于學(xué)習(xí)。

偶爾見(jiàn)登錄QQ,看到自己10年前寫的一篇日志:

三月桃花,一生的旅程。

????收縮在一只蝴蝶的內(nèi)心,安然小憩。

可能錯(cuò)過(guò)風(fēng),也可能錯(cuò)過(guò)雨;

????雨過(guò)天晴,果實(shí)淡忘了花的記憶。

10年已過(guò),唯有當(dāng)時(shí)的文字能讓我喜歡起之前的自己!加油。

?

~~~下課鈴~~~

?

【往期熱門文章】:

【Python成長(zhǎng)之路】10行代碼教你免費(fèi)觀看無(wú)廣告版的《慶余年》騰訊視頻

【Python成長(zhǎng)之路】如何用python開發(fā)自己的iphone應(yīng)用程序,并添加至siri指令

【Python成長(zhǎng)之路】從 零做網(wǎng)站開發(fā) -- 基于Flask和JQuery,實(shí)現(xiàn)表格管理平臺(tái)

點(diǎn)擊下方詩(shī)句,可以留言互動(dòng)喔??

?

且笑風(fēng)塵,不敢造次;煮酒話桑,不敢相思。

?

【關(guān)注“鵬哥賊優(yōu)秀”公眾號(hào),回復(fù)“python學(xué)習(xí)材料”,將會(huì)有python基礎(chǔ)學(xué)習(xí)、機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘、高級(jí)編程教程等100G視頻資料,及100+份python相關(guān)電子書免費(fèi)贈(zèng)送!】

?

掃描二維碼

? ??與鵬哥一起

學(xué)python吧!

?

總結(jié)

以上是生活随笔為你收集整理的【Python成长之路】共享平台的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。