This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
язык_программирования_python [2025/01/11 11:56] val [Web приложение] |
язык_программирования_python [2025/05/27 11:53] (current) val |
||
---|---|---|---|
Line 19: | Line 19: | ||
</code> | </code> | ||
+ | |||
+ | ===== Интерактивная оболочка ===== | ||
+ | <code> | ||
+ | (venv1) # pip install ipython | ||
+ | </code> | ||
===== Web приложение ===== | ===== Web приложение ===== | ||
Line 52: | Line 57: | ||
config = configparser.ConfigParser() | config = configparser.ConfigParser() | ||
config.read('/etc/pywebd/pywebd.conf') | config.read('/etc/pywebd/pywebd.conf') | ||
- | pywebd_port = os.environ.get('PYWEBD_PORT',config['default']['Listen']) | + | # pywebd_port = os.environ.get('PYWEBD_PORT',config['default']['Listen']) |
- | pywebd_doc_root = os.environ.get('PYWEBD_DOC_ROOT',config['default']['DocumentRoot']) | + | # pywebd_doc_root = os.environ.get('PYWEBD_DOC_ROOT',config['default']['DocumentRoot']) |
+ | if 'PYWEBD_PORT' in os.environ: | ||
+ | pywebd_port = os.environ.get('PYWEBD_PORT') | ||
+ | else: | ||
+ | pywebd_port = config['default']['Listen'] | ||
+ | if 'PYWEBD_DOC_ROOT' in os.environ: | ||
+ | pywebd_doc_root = os.environ.get('PYWEBD_DOC_ROOT') | ||
+ | else: | ||
+ | pywebd_doc_root = config['default']['DocumentRoot'] | ||
app.run(host="0.0.0.0", port=pywebd_port, debug=True) | app.run(host="0.0.0.0", port=pywebd_port, debug=True) | ||
# app.run(ssl_context=('/etc/pywebd/pywebd.crt', '/etc/pywebd/pywebd.key'), debug=True, host='0.0.0.0', port=pywebd_port) | # app.run(ssl_context=('/etc/pywebd/pywebd.crt', '/etc/pywebd/pywebd.key'), debug=True, host='0.0.0.0', port=pywebd_port) | ||
+ | |||
</code><code> | </code><code> | ||
# mkdir -p /etc/pywebd/ | # mkdir -p /etc/pywebd/ | ||
Line 64: | Line 79: | ||
DocumentRoot = /var/www/ | DocumentRoot = /var/www/ | ||
Listen = 4080 | Listen = 4080 | ||
+ | </code><code> | ||
+ | # #cp /root/wild.crt /etc/pywebd/pywebd.crt | ||
+ | # #cp /root/wild.key /etc/pywebd/pywebd.key | ||
</code> | </code> | ||
Line 71: | Line 89: | ||
(venv1) :~/pywebd$ #export PYWEBD_PORT=4443 | (venv1) :~/pywebd$ #export PYWEBD_PORT=4443 | ||
(venv1) :~/pywebd$ #export PYWEBD_DOC_ROOT=/var/www/html/ | (venv1) :~/pywebd$ #export PYWEBD_DOC_ROOT=/var/www/html/ | ||
+ | (venv1) :~/pywebd$ #PYWEBD_PORT=4443 PYWEBD_DOC_ROOT=/var/www/html/ python app.py | ||
(venv1) :~/pywebd$ python app.py | (venv1) :~/pywebd$ python app.py | ||
(venv1) :~/pywebd$ pip freeze | tee requirements.txt | (venv1) :~/pywebd$ pip freeze | tee requirements.txt | ||
+ | </code> | ||
+ | |||
+ | ===== CRUD Rest API приложение ===== | ||
+ | |||
+ | |||
+ | * [[https://dev.to/francescoxx/python-crud-rest-api-using-flask-sqlalchemy-postgres-docker-docker-compose-3kh4|Python CRUD Rest API using Flask, SQLAlchemy, Postgres, Docker, Docker Compose]] | ||
+ | |||
+ | ===== Zabbix API приложение ===== | ||
+ | |||
+ | * [[https://www.zabbix.com/documentation/current/en/manual/api]] | ||
+ | * [[https://sbcode.net/zabbix/zabbix-api-python-example/]] | ||
+ | * [[https://forum.checkmk.com/t/rest-api-python-question-how-to-use-variables-in-json-post-in-key-and-value/34652]] | ||
+ | | ||
+ | <code> | ||
+ | (venv1) server:~# pip install requests | ||
+ | |||
+ | (venv1) server:~# cat zab_set_map_name.py | ||
+ | </code><code> | ||
+ | #!/usr/bin/env python3 | ||
+ | |||
+ | import requests | ||
+ | import json | ||
+ | from sys import argv | ||
+ | |||
+ | if len(argv) != 3 : | ||
+ | print("You must set argument!!!\nExample: python zab_set_map_name.py 2 \"ISP 1\"") | ||
+ | quit() | ||
+ | |||
+ | MAPID = argv[1] | ||
+ | MAPNAME = argv[2] | ||
+ | |||
+ | ZABBIX_API_URL = "http://127.0.0.1/zabbix/api_jsonrpc.php" | ||
+ | UNAME = "Admin" | ||
+ | PWORD = "zabbix" | ||
+ | |||
+ | print("\nLogin user {} to Zabbiz API".format(UNAME)) | ||
+ | r = requests.post(ZABBIX_API_URL, | ||
+ | json={ | ||
+ | "jsonrpc": "2.0", | ||
+ | "method": "user.login", | ||
+ | "params": { | ||
+ | "username": UNAME, | ||
+ | "password": PWORD}, | ||
+ | "id": 1 | ||
+ | }) | ||
+ | |||
+ | print(json.dumps(r.json(), indent=4, sort_keys=True)) | ||
+ | |||
+ | AUTHTOKEN = r.json()["result"] | ||
+ | |||
+ | #print("Rename Map with ID", MAPID, "to", MAPNAME) | ||
+ | print(f"Rename Map with ID {MAPID} to {MAPNAME}") | ||
+ | |||
+ | r = requests.post(ZABBIX_API_URL, | ||
+ | headers={'Authorization': 'Bearer ' + AUTHTOKEN}, | ||
+ | json={ | ||
+ | "jsonrpc": "2.0", | ||
+ | "method": "map.update", | ||
+ | "params": { | ||
+ | "sysmapid": MAPID, | ||
+ | "name": MAPNAME | ||
+ | }, | ||
+ | "id": 2 | ||
+ | }) | ||
+ | |||
+ | print(json.dumps(r.json(), indent=4, sort_keys=True)) | ||
+ | |||
+ | print("\nLogout user") | ||
+ | r = requests.post(ZABBIX_API_URL, | ||
+ | headers={'Authorization': 'Bearer ' + AUTHTOKEN}, | ||
+ | json={ | ||
+ | "jsonrpc": "2.0", | ||
+ | "method": "user.logout", | ||
+ | "params": {}, | ||
+ | "id": 2, | ||
+ | }) | ||
+ | |||
+ | print(json.dumps(r.json(), indent=4, sort_keys=True)) | ||
+ | </code><code> | ||
+ | (venv1) server:~# chmod +x zab_set_map_name.py | ||
+ | |||
+ | (venv1) server:~# ./zab_set_map_name.py 2 "ISP 1" | ||
+ | </code> | ||
+ | |||
+ | ===== Zabbix LLD приложение ===== | ||
+ | |||
+ | * [[https://www.geeksforgeeks.org/python-find-dictionary-matching-value-in-list/]] | ||
+ | * [[https://docs-python.ru/tutorial/vstroennye-funktsii-interpretatora-python/funktsija-next/]] | ||
+ | <code> | ||
+ | gate# apt install python3-xmltodict/stable | ||
+ | |||
+ | gate# cat /etc/zabbix/dhcp-pools.py | ||
+ | </code><code> | ||
+ | #!/usr/bin/env python3 | ||
+ | |||
+ | # Example usage: | ||
+ | # ./dhcp-pools.py | ||
+ | # ./dhcp-pools.py LAN1 defined|used | ||
+ | |||
+ | from sys import argv | ||
+ | import subprocess, xmltodict, json | ||
+ | |||
+ | p = subprocess.Popen("/usr/bin/dhcpd-pools -f x", stdout=subprocess.PIPE, shell=True) | ||
+ | (output, err) = p.communicate() | ||
+ | p_status = p.wait() | ||
+ | |||
+ | o = xmltodict.parse(output) | ||
+ | |||
+ | if len(argv)==1: | ||
+ | r=[] | ||
+ | for i in o['dhcpstatus']['shared-network']: | ||
+ | s={} | ||
+ | s["{#POOLNAME}"]=i['location'] | ||
+ | r.insert(1,s) | ||
+ | print(json.dumps(r)) | ||
+ | else: | ||
+ | LANNAME=argv[1] | ||
+ | USDEF=argv[2] | ||
+ | res = next((sub for sub in o['dhcpstatus']['shared-network'] if sub['location'] == LANNAME), None) | ||
+ | print(res[USDEF]) | ||
</code> | </code> | ||
===== Дополнительные материалы ===== | ===== Дополнительные материалы ===== | ||
+ | |||
+ | * [[https://pypi.org/project/ansible-output-parser/]] | ||
+ | * [[https://www.cyberciti.biz/faq/python-run-external-command-and-get-output/]] | ||
==== Доступ к каталогу по http ==== | ==== Доступ к каталогу по http ==== | ||
Line 87: | Line 229: | ||
</code> | </code> | ||
+ | ==== Черновик ==== | ||