Hoi Habr!
Ik seach koartlyn in ynladen ferzje fan 'e programmearstream "Hoe kinne jo jo eigen webapplikaasje meitsje yn Flask." En ik besleat om myn kennis te konsolidearjen yn in projekt. Lange tiid wist ik net wat ik skriuwe moast en kaam it idee by my op: "Wêrom net in mini-efterdoar yn Flask meitsje?"
De earste opsjes foar ymplemintaasje en mooglikheden fan 'e efterdoar ferskynden fuortendaliks yn myn holle. Mar ik besleat om fuortendaliks in list te meitsjen mei efterdoarmooglikheden:
- Witte hoe't jo websiden iepenje
- Hawwe kommandorigel tagong
- Kin programma's, foto's, fideo's iepenje
Dat, it earste punt is ekstreem maklik te ymplementearjen mei de webbrowsermodule. Ik besleat it twadde punt út te fieren mei de os-module. En de tredde is ek fia de os module, mar ik sil brûke "keppelings" (mear oer dat letter).
It skriuwen fan in tsjinner
Dus, *drumroll* alle serverkoade:
from flask import Flask, request
import webbrowser
import os
import re
app = Flask(__name__)
@app.route('/mycomp', methods=['POST'])
def hell():
json_string = request.json
if json_string['command'] == 'test':
return 'The server is running and waiting for commands...'
if json_string['command'] == 'openweb':
webbrowser.open(url='https://www.'+json_string['data'], new=0)
return 'Site opening ' + json_string['data'] + '...'
if json_string['command'] == 'shell':
os.system(json_string['data'])
return 'Command execution ' + json_string['data'] + '...'
if json_string['command'] == 'link':
links = open('links.txt', 'r')
for i in range(int(json_string['data'])):
link = links.readline()
os.system(link.split('>')[0])
return 'Launch ' + link.split('>')[1]
if __name__ == '__main__':
app.run(host='0.0.0.0')
Ik haw al dumpt alle koade, it is tiid om te ferklearjen de essinsje.
Alle koade rint op de lokale kompjûter op haven 5000. Om ynteraksje mei de tsjinner, wy moatte stjoere in JSON POST fersyk.
JSON-oanfraachstruktuer:
{‘command’: ‘comecommand’, ‘data’: ‘somedata’}
No, it makket sin dat 'kommando' it kommando is dat wy wolle útfiere. En 'gegevens' binne de kommando-arguminten.
Jo kinne JSON-fersiken skriuwe en stjoere om manuell te ynteraksje mei de tsjinner (fersiken sille jo helpe). Of jo kinne in konsole-kliïnt skriuwe.
It skriuwen fan in klant
Code:
import requests
logo = ['nn',
'****** ********',
'******* *********',
'** ** ** **',
'** ** ** ** Written on Python',
'******* ** **',
'******** ** **',
'** ** ** ** Author: ROBOTD4',
'** ** ** **',
'** ** ** **',
'******** *********',
'******* ********',
'nn']
p = ''
iport = '192.168.1.2:5000'
host = 'http://' + iport + '/mycomp'
def test():
dict = {'command': 'test', 'data': 0}
r = requests.post(host, json=dict)
if r.status_code == 200:
print (r.content.decode('utf-8'))
def start():
for i in logo:
print(i)
start()
test()
while True:
command = input('>')
if command == '':
continue
a = command.split()
if command == 'test':
dict = {'command': 'test', 'data': 0}
r = requests.post(host, json=dict)
if r.status_code == 200:
print (r.content.decode('utf-8'))
if a[0] == 'shell':
for i in range(1, len(a)):
p = p + a[i] + ' '
dict = {'command': 'shell', 'data': p}
r = requests.post(host, json=dict)
if r.status_code == 200:
print (r.content.decode('utf-8'))
p = ''
if a[0] == 'link':
if len(a) > 1:
dict = {'command': 'link', 'data': int(a[1])}
r = requests.post(host, json=dict)
if r.status_code == 200:
print (r.content.decode('utf-8'))
else:
print('Комманда не содержит аргументов!')
if a[0] == 'openweb':
if len(a) > 1:
dict = {'command': 'openweb', 'data': a[1]}
r = requests.post(host, json=dict)
if r.status_code == 200:
print (r.content.decode('utf-8'))
else:
print('Комманда не содержит аргументов!')
if a[0] == 'set':
if a[1] == 'host':
ip = a[2] + ':5000'
if command == 'quit':
break
Taljochtingen:
As earste wurdt de oanfraachmodule ymportearre (foar ynteraksje mei de tsjinner). Hjirûnder steane beskriuwingen fan de start- en testfunksjes. En dan de syklus wêryn de magy bart. Hawwe jo de koade lêzen? Sa begripe jo de betsjutting fan 'e magy dy't bart yn' e syklus. Fier it kommando yn - it wurdt útfierd. Shell - kommando's foar de kommandorigel (de logika is fan skaal ôf).
Test - kontrolearje oft de tsjinner rint (efterdoar)
Link - gebrûk fan in "fluchtoets"
Openweb - it iepenjen fan in webside
Ofslute - de klant ferlitte
Set - it ip fan jo kompjûter ynstelle op it lokale netwurk
En no mear oer link.
Der is in link.txt triem neist de tsjinner. It befettet keppelings (folslein paad) nei bestannen (fideo's, foto's, programma's).
De struktuer is sa:
полный_путь>описание
полный_путь>описание
It resultaat
Wy hawwe in efterdoarserver foar it kontrolearjen fan in kompjûter op in lokaal netwurk (binnen in wi-fi netwurk). Technysk kinne wy de kliïnt útfiere fan elk apparaat dat in python-tolk hat.
PS Ik haw it set kommando tafoege sadat as in kompjûter op it lokale netwurk in oare IP wurdt tawiisd, kin it direkt yn 'e kliïnt feroare wurde.
Boarne: www.habr.com