تتيح لك الوحدة النمطية البسيطة المستندة إلى الويب هذه إعداد خادم ويب HTTP تلقائيًا من كائنات argparse.ArgumentParser المتقدمة وأكان مماثلة ( argh.ArgumentParser ). يتيح لك استخدام هذا أعلى ARGH إنشاء واجهة مستخدم الويب تلقائيًا من وظائف بسيطة محددة في التطبيق الخاص بك. تم صنع هذه الحزمة للحصول على نصوص سطر الأوامر الشخصية الخاصة بك إلى المرحلة التالية - المرافق المشتركة الداخلية.
لإنتاج مثل الإعداد ستحتاج:
اجعل البرنامج النصي الرئيسي الخاص بك يعرض كائنًا عالميًا للتطبيق عن طريق الاتصال بـ webui.webui.wsgi () طريقة
تعديل index.wsgi لتناسب التطبيق الخاص بك (التكوين التافهة ، استيراد التطبيق المذكور أعلاه)
قم بإعداد خادم Apache (أو أي) خادم Apache (أو أي) خادم آخر
لتصحيح الأخطاء مثل الإعداد الذي ستحتاجه (ولكن نظرًا لأنه يستخدم للأدوات الداخلية ، فقد يكون هذا جيدًا أيضًا):
argparse.ArgumentParser.parse_args() أو argh.dispatch() مع webui.Webui.getone() أو webui.Webui.dispatch() على التوالي. ستقوم dispatch() بتسهيل إنشاء أساليب خدمة ويب ومكالمات (إما المقدمة من قبل المستخدم - أو - أو أساليب الإرسال لدعم محلات الوسيطة مثل argh )
get() و getone() لف طريقة dispatch() والنتائج العائد عند تقديمها في نموذج الويب ، مما يوفر واجهة تشبه طريقة parse_args() .
يتطلب argparseweb web.py متاحًا. يمكنك تثبيته (تحقق من أحدث إصدار) مع: pip install web.py
سيقوم هذا المثال بإعداد خادم HTTP ، والحصول على إدخال واحد صالح ، وتمزيق خادم HTTP لأسفل ، وطبع رسالة ترحيبية إلى stdout والخروج:
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 ()سيتم تشغيل هذا المثال أيضًا حتى يتوقف ، طباعة رسالة ترحيبية لكل إدخال صالح:
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 ()سيقوم هذا المثال بطباعة رسالة الترحيب في استجابة HTTP ، وإرسالها مرة أخرى إلى المستخدم:
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 ()يتضمن هذا المقتطف ثلاث أوضاع للتشغيل لأداة Webui:
أولاً وأبسط: إرسال طرق باستخدام وظيفة ARGH التلقائية إلى مرافق محلل سطر الأوامر ، وهذا لا علاقة له تمامًا بـ Webui وبهذه الطريقة لن تفقد قدرة استخدام سطر الأوامر الحالي.
الحصول على --webui كوسيطة سطر الأوامر الأول ، يقوم بإعداد خادم ويب تطوير (افتراضي إلى *: 8080) وهو جاهز للاستخدام.
تعريض كائن عالمي application يدعم واجهة WSGI. بمجرد توجيه المتصفح مع تكوين WSGI الصحيح (كان قليلاً من الألم بالنسبة لي لأول مرة) ستعمل مثل السحر :)
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 المزيد من الأمثلة في test.py
منتهي: