Tere, Habr!
Hiljuti vaatasin alla laaditud versiooni programmeerimisvoost "Kuidas luua oma veebirakendust Flaskis". Otsustasin oma teadmisi kinnistada mingis projektis. Pikka aega ei osanud ma kirjutada, kuni tuli mõte: "Miks mitte teha väike tagauks Flaskis?".
Minu peas tekkisid kohe esimesed rakenduse variandid ja tagaukse võimalused. Otsustasin aga kohe koostada tagaukse võimaluste loetelu:
- Saada avada veebilehti
- Omada juurdepääsu käsureale
- Saada avada programme, fotosid, videoid
Nii et esimene punkt on äärmiselt lihtne ellu viia, kasutades moodulit webbrowser. Teise punkti ellu viin ma mooduli os abil. Ja kolmas - samuti mooduli os abil, kuid kasutan "linke" (sellest räägin hiljem).
Kirjutamine serverilt
Nii et *trummipõrin* kogu serveri kood:
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 'Server töötab ja ootab käske...'
if json_string['command'] == 'openweb':
webbrowser.open(url='https://www.'+json_string['data'], new=0)
return 'Veebilehe avamine ' + json_string['data'] + '...'
if json_string['command'] == 'shell':
os.system(json_string['data'])
return 'Käskluse täitmine ' + 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 'Käivitamine ' + link.split('>')[1]
if __name__ == '__main__':
app.run(host='0.0.0.0')
Olen juba kogu koodi välja ladunud, on aeg põhjus selgeks teha.
Kogu kood töötab kohaliku arvuti 5000. porti peal. Suhtlemiseks serverilt peame saatma JSON POST päringu.
JSON päringu struktuur:
{‘command’: ‘comecommand’, ‘data’: ‘somedata’}Noh, mõistlik on, et 'command' on käsk, mida me soovime täita. Ja 'data' on käsu argumendid.
Saate käsitsi kirjutada ja saata JSON päringuid serveriga suhtlemiseks (teie abiks on requests). Võite ka kirjutada konsoliklient.
Kliendi kirjutamine
Kood:
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
Selgitused:
Esiteks imporditakse requests moodul (serveriga suhtlemiseks). Edasi on kirjeldatud funktsioonid start ja test. Ja siis toimub tsükkel, kus juhtub jõud. Kas olete koodi lugenud? Siis on teile selge, mis selles tsüklis toimub. Sisestage käsk – see täidetakse. Shell - käskude jaoks käsurealt (loogika on kõrge).
Test – kontrollib, kas server (tagakülg) töötab.
Link – 'kiiruuringu' kasutamine.
Openweb – veebilehe avamine.
Quit – kliendist väljumine.
Set – teie arvuti IP-aadressi määramine kohalikus võrgus.
Nüüd lähemalt linkist.
Serveri kõrval on fail link.txt. See sisaldab linke (täielikke teid) failidele (videod, fotod, programmid).
Struktuur on järgmine:
täielik_teekond>kirjeldus
täielik_teekond>kirjeldus
Kokkuvõte
Meil on server-tagakülg, et hallata arvutit kohalikus võrgus (wi-fi võrgus). Tehniliselt saame kliendi käivitada mis tahes seadmes, kus on python tõlgendaja.
P.S. Lisasin käskluse set, et kui kohalikule võrgule määratakse teine IP, saaks seda vahetada otse kliendist.
Allikas: habr.com
