โมดูลง่าย ๆ ที่ใช้ web.py นี้ช่วยให้คุณสามารถตั้งค่าเว็บเซิร์ฟเวอร์ HTTP แบบง่าย ๆ โดยอัตโนมัติจากวัตถุ argparse.ArgumentParser ขั้นสูงและที่คล้ายกัน ( argh.ArgumentParser ) การใช้สิ่งนี้ที่ด้านบนของ ARGH ช่วยให้คุณสร้างส่วนต่อประสานผู้ใช้เว็บโดยอัตโนมัติจากฟังก์ชั่นง่าย ๆ ที่กำหนดไว้ในแอปพลิเคชันของคุณ แพ็คเกจนี้สร้างขึ้นเพื่อให้สคริปต์บรรทัดคำสั่งส่วนตัวของคุณไปยังขั้นตอนต่อไป - ยูทิลิตี้ที่ใช้ร่วมกันภายใน
สำหรับการผลิตเช่นการตั้งค่าที่คุณต้องการ:
ทำให้สคริปต์หลักของคุณเปิดเผยแอปพลิเคชันออบเจ็กต์โดยเรียกวิธีการ webui.webui.wsgi ()
แก้ไข index.wsgi เพื่อให้พอดีกับแอปพลิเคชันของคุณ (การกำหนดค่าเล็กน้อย, นำเข้าแอปพลิเคชันดังกล่าวข้างต้น)
ตั้งค่าเซิร์ฟเวอร์ Apache (หรืออื่น ๆ ) ที่รองรับ WSGI
สำหรับการดีบักเช่นการตั้งค่าที่คุณต้องการ (แต่เนื่องจากใช้สำหรับเครื่องมือภายในสิ่งนี้อาจจะดี):
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 ในการสั่งสิ่งอำนวยความสะดวก Parser Line ซึ่งไม่เกี่ยวข้องกับ 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
เสร็จแล้ว: