Modul sederhana berbasis web.py ini memungkinkan Anda untuk secara otomatis mengatur server web http sederhana dari objek argparse.ArgumentParser canggih dan yang serupa ( argh.ArgumentParser ). Menggunakan ini di atas Argh memungkinkan Anda secara otomatis menghasilkan antarmuka pengguna web dari fungsi sederhana yang ditentukan dalam aplikasi Anda. Paket ini dibuat untuk membawa skrip baris perintah pribadi Anda ke tahap berikutnya - utilitas bersama internal.
Untuk produksi seperti pengaturan yang Anda perlukan:
Buat skrip utama Anda mengekspos objek global aplikasi dengan memanggil metode webui.webui.wsgi ()
Modifikasi index.wsgi agar sesuai dengan aplikasi Anda (konfigurasi sepele, impor aplikasi yang disebutkan di atas)
Siapkan WSGI yang mendukung server Apache (atau lainnya)
Untuk debugging seperti pengaturan yang Anda perlukan (tetapi karena digunakan untuk alat internal, ini mungkin juga baik -baik saja):
argparse.ArgumentParser.parse_args() atau argh.dispatch() dengan webui.Webui.getone() atau webui.Webui.dispatch() . dispatch() akan membuat instantiate layanan web dan panggilan pengiriman (baik disediakan oleh pengguna - Anda - atau pengiriman metode pendukung parser argumen seperti argh )
get() dan getone() Bungkus metode dispatch() dan hasilkan hasil karena mereka dikirimkan dalam formulir web, menyediakan antarmuka yang menyerupai metode parse_args() .
argparseweb membutuhkan web.py agar tersedia. Anda dapat menginstalnya (periksa versi terbaru) dengan: pip install web.py
Contoh ini akan mengatur server http, dapatkan satu input yang valid, robek server http ke bawah, cetak pesan penyambutan ke stdout dan keluar:
import argparse
from argparseweb import *
def main ():
parser = argparse . ArgumentParser ()
parser . add_argument ( "name" , default = "Anonymous" )
# previously opts = parser.parse_args()
opts = webui . Webui ( parser ). getone ()
print ( "Hello {name}, n this is a simple example." . format ( name = opts . name ))
if __name__ == "__main__" :
main ()Contoh ini juga akan berjalan sampai berhenti, mencetak pesan yang ramah untuk setiap input yang valid:
import argparse
from argparseweb import *
def main ():
parser = argparse . ArgumentParser ()
parser . add_argument ( "name" , default = "Anonymous" )
# previously opts = parser.parse_args()
for opts in webui . Webui ( parser ). get ():
print ( "Hello {name}, n this is a simple example." . format ( name = opts . name ))
if __name__ == "__main__" :
main ()Contoh ini akan mencetak pesan penyambutan dalam respons HTTP, mengirimkannya kembali ke pengguna:
import argparse
from argparseweb import *
def welcome ( opts ):
print ( "Hello {name}, n this is a simple example." . format ( name = opts . name ))
def main ():
parser = argparse . ArgumentParser ()
parser . add_argument ( "name" , default = "Anonymous" )
# previously opts = parser.parse_args()
webui . Webui ( parser ). dispatch ( welcome , parsed = True )
if __name__ == "__main__" :
main ()Cuplikan ini mencakup tiga mode operasi untuk utilitas WebUI:
Pertama dan paling sederhana: Metode pengiriman menggunakan fungsi otomatis Argh untuk memerintahkan fasilitas parser baris, ini sama sekali tidak terkait dengan WebUI dan dengan cara itu Anda tidak akan kehilangan kemampuan penggunaan baris perintah yang ada.
Mendapatkan --webui sebagai argumen baris perintah pertama, mengatur server web pengembangan (default ke *: 8080) dan siap digunakan.
Mengekspos Objek Global application yang mendukung antarmuka WSGI. Setelah Anda mengarahkan browser dengan konfigurasi WSGI yang benar (sedikit menyakitkan bagi saya pertama kali) itu akan bekerja seperti sihir :)
myapp.py:
import argparse
from argparseweb import *
def get_parser ():
"""Generate generic argument parser"""
cmd_parser = argh . ArghParser ()
cmd_parser . add_commands ([...])
return cmd_parser
def main_1 ():
# k. get the parser as usual
cmd_parser = get_parser ()
# last chance to use webui, if --webui is passed as first command line argument
# remove it as let webui handle the rest
if sys . argv [ 1 ] == '--webui' :
sys . argv . remove ( '--webui' )
webui . Webui ( cmd_parser ). dispatch () # second mode of operation - development/fast setup
else :
# dispatch either webui or argh
cmd_parser . dispatch () # first mode of operation - regular command line
def main_2 ():
parser = argparse . ArgumentParser ()
# TODO: fill argparse
# opts = parser.parse_args()
opts = webui . Webui ( parser ). getone ()
# TODO: use opts as you would with any ArgumentParser generated namespace,
# opts is really a namespace object directly created by parser, and webui only compiled an argument sequence
# based on the filled form, passed into parser.parse_args() and back to you
def wsgi ():
global application
# create a webui application using the command line argument parser object
# and make it's wsgi function the global `application` parameter as required by wsgi
cmd_parser = get_parser ()
application = webui . Webui ( cmd_parser ). wsgi () # third mode of operation - production wsgi application
if __name__ == "__main__" :
# script initialized as main, lets do our trick
main ()
else :
# if script wasn't initialized as main script, we're probably running
# in wsgi mode
wsgi ()index.wsgi:
# TODO: replace with your application path
# i found now way to get it automatically in wsgi :/
APP_DIR = '/var/www/myapp'
import sys , os
sys . path . insert ( 0 , APP_DIR )
os . chdir ( APP_DIR )
from myapp import application Lebih banyak contoh di test.py
Selesai: