วิธีที่ดีที่สุดในการสร้างบริการเว็บหลามอย่างง่าย [ปิด]


137

ฉันใช้หลามมาหลายปีแล้ว แต่ฉันมีประสบการณ์น้อยมากกับการเขียนโปรแกรมเว็บหลาม ฉันต้องการสร้างบริการบนเว็บที่เรียบง่ายซึ่งมีฟังก์ชั่นการใช้งานบางอย่างจากสคริปต์ไพ ธ อนที่มีอยู่เพื่อใช้ภายใน บริษัท ของฉัน มีแนวโน้มที่จะส่งคืนผลลัพธ์เป็น csv เป็นวิธีที่เร็วที่สุดที่จะได้อะไร หากมีผลต่อคำแนะนำของคุณฉันจะเพิ่มฟังก์ชันการทำงานให้มากขึ้นตามถนน


นี่แสดงตัวอย่างรวดเร็วที่ดี: dreamsyssoft.com/blog/blog.php?/archives/…
Triton Man

github.com/pramttl/webipy ฉันเขียนเครื่องมือนี้ซึ่งจะเปลี่ยนฟังก์ชั่น python ของคุณให้เป็นจุดสิ้นสุดของเว็บโดยอัตโนมัติ มันมีข้อ จำกัด บางประการเกี่ยวกับนิยามฟังก์ชันของคุณ แต่เป็นวิธีที่เร็วที่สุดในการสร้างจุดสิ้นสุดของเว็บสำหรับฟังก์ชั่นหลามของคุณ Infact webipy ใช้ django แต่สร้างมุมมอง django โดยอัตโนมัติสำหรับฟังก์ชั่น python ของคุณ คุณไม่จำเป็นต้องเขียน "รหัสเว็บ"
Pranjal Mittal

คำตอบ:


55

Werkzeug เริ่มต้นจากการรวบรวมสาธารณูปโภคต่าง ๆ สำหรับแอพพลิเคชั่น WSGI และกลายเป็นหนึ่งในโมดูลยูทิลิตี้ WSGI ที่ทันสมัยที่สุด มันมีตัวดีบักอันทรงพลัง, คำขอเต็มรูปแบบและวัตถุตอบสนอง, ยูทิลิตี้ HTTP เพื่อจัดการแท็กเอนทิตี, ส่วนหัวของการควบคุมแคช, วันที่ HTTP, การจัดการคุกกี้, การอัปโหลดไฟล์, ระบบการกำหนดเส้นทาง URL อันทรงพลัง

มันมีเครื่องมือเจ๋ง ๆ มากมายให้ใช้งานกับ http และมีข้อได้เปรียบที่คุณสามารถใช้กับ wsgi ในสภาพแวดล้อมที่แตกต่างกัน (cgi, fcgi, apache / mod_wsgi หรือกับเซิร์ฟเวอร์หลามธรรมดาธรรมดาสำหรับการดีบัก)


2
ฉันลงเอยด้วยการใช้ werkzeug สำหรับสิ่งนี้ ฉันชอบที่จะยืดหยุ่น ขอบคุณสำหรับคำแนะนำ
Jeremy Cantrell

1
ฉันลองกรอบเว็บอื่นประมาณสามเฟรมก่อนจะไปถึงเฟรมเวิร์กนี้ นี่เป็นครั้งแรกที่ฉันสามารถออกกำลังกายนอกกรอบ เยี่ยมมาก!
BenDundee

26

web.pyอาจเป็นเว็บเฟรมที่ง่ายที่สุด "Bare" CGI นั้นง่ายกว่า แต่คุณเองที่จะทำสิ่งที่จริง

"สวัสดีชาวโลก!" ตาม web.py นั้นไม่ได้มีความยาวมากกว่ารุ่น CGI ที่เปลือยเปล่า แต่มันเพิ่มการแมป URL ความแตกต่างของคำสั่ง HTTP และพารามิเตอร์การสืบค้นแยกวิเคราะห์ฟรี :

import web

urls = (
    '/(.*)', 'hello'
)
app = web.application(urls, globals())

class hello:        
    def GET(self, name):
        if not name: 
            name = 'world'
        return 'Hello, ' + name + '!'

if __name__ == "__main__":
    app.run()

ใช่แล้ว web.py ดูดีมาก ณ ตอนนี้เว็บไซต์ < webpy.org > พูดว่า: 500 - ข้อผิดพลาดเซิร์ฟเวอร์ภายในมิฉะนั้นรหัสของเราไม่ทำงานสำหรับฉัน: ... app = web.application (urls, globals ()) AttributeError: 'module' object ไม่มีแอปพลิเคชัน 'แอปพลิเคชัน'
bortzmeyer

1
เว็บไซต์กลับมาแล้ว คุณอาจต้องการตรวจสอบเวอร์ชั่นของคุณเนื่องจากรหัสของ Tim ดูถูกต้อง
ชาร์ลีมาร์ติน

1
ฉันวิ่งเข้าไปในนี้ด้วย หากคุณใช้งาน Ubuntu เวอร์ชันที่จัดส่งในที่เก็บ 8.10 นั้นค่อนข้างล้าสมัย คว้าสิ่งใหม่ล่าสุดจากเว็บไซต์หรือใช้ easy_install และคุณควรเป็นทอง
bouvard

ตาม webpy.org (เว็บไซต์ทางการทางการ web.py) yandex ใช้ web.py (มี 70 เพจวิวต่อวัน) ดังนั้นมันต้องมีประสิทธิภาพ ..
โปรแกรมเมอร์

นี่คือสิ่งที่ฉันต้องการ ง่ายตรงประเด็นและใช้งานง่าย
GuiSim

15

วิธีที่ง่ายที่สุดในการรับสคริปต์ Python แบบออนไลน์คือการใช้ CGI:

#!/usr/bin/python

print "Content-type: text/html"
print

print "<p>Hello world.</p>"

วางรหัสนั้นในสคริปต์ที่อยู่ในไดเรกทอรี CGI ของเว็บเซิร์ฟเวอร์ทำให้สามารถเรียกใช้และรันได้ cgiโมดูลมีจำนวนสาธารณูปโภคที่มีประโยชน์เมื่อคุณต้องยอมรับพารามิเตอร์จากผู้ใช้


เมื่อทำวิธีนี้ให้แน่ใจว่าตัวจัดการถูกตั้งค่าอย่างเหมาะสมสำหรับสคริปต์ไพ ธ อนใน Apache ตัวอย่าง: AddHandler cgi-script .cgi .pl .py
Tegan Snyder

1
จุดคือการเรียกใช้แอปโดยไม่ต้องมีเว็บเซิร์ฟเวอร์เพิ่มเติมใด ๆ
AstraSerg

12

CGI ดิบนั้นเจ็บปวดมากและ Django นั้นเป็นรุ่นที่มีน้ำหนักมาก มีจำนวนของง่ายกรอบเบาเกี่ยวกับการเป็นเช่นCherryPy มันคุ้มค่าที่จะดูสักหน่อย


2
+1 สำหรับ CherryPy มันสมบูรณ์แบบเมื่อคุณต้องการบางสิ่งที่ง่ายกว่า Django
Steve Losh

9

ดูที่ดำเนินการอ้างอิง WSGI คุณมีอยู่ในห้องสมุด Python ของคุณแล้ว มันค่อนข้างง่าย


อย่างที่ฉันบอกว่าประสบการณ์ของฉันกับการเขียนโปรแกรมเว็บไพ ธ อนค่อนข้าง จำกัด แต่แอป WSGI สามารถเรียกใช้ "สแตนด์อโลน" ได้โดยไม่มีเว็บเซิร์ฟเวอร์อย่าง apache ใช่ไหม?
Jeremy Cantrell

ใช่. โดดเดี่ยวโดยสิ้นเชิง ใช้งานได้ดี อย่างไรก็ตามคุณไม่สามารถใช้พอร์ต 80 ได้หากไม่มี Apache หรือสิทธิ์พิเศษ - แต่นั่นเป็นปัญหาด้านความปลอดภัยของระบบปฏิบัติการ
S.Lott

4

หากคุณหมายถึงสิ่งที่ "Web Service" เข้าถึงได้โดย Programms SimpleXMLRPCServerอื่น ๆ อาจเหมาะกับคุณ มันรวมอยู่ในทุกการติดตั้ง Python ตั้งแต่เวอร์ชั่น 2.2

สำหรับสิ่งที่เข้าถึงได้ง่ายของมนุษย์ฉันมักใช้ Pythons SimpleHTTPServerซึ่งมาพร้อมกับการติดตั้งทุกครั้ง เห็นได้ชัดว่าคุณสามารถเข้าถึง SimpleHTTPServer โดยโปรแกรมไคลเอนต์


2

ชีวิตนั้นง่ายหากคุณได้รับกรอบเว็บที่ดี บริการเว็บในDjangoนั้นง่าย กำหนดรุ่นของคุณเขียนฟังก์ชั่นดูที่ส่งคืนเอกสาร CSV ของคุณ ข้ามเทมเพลต


2

หากคุณหมายถึง "บริการเว็บ" ในแง่ของ SOAP / WSDL คุณอาจต้องการดู การสร้าง WSDL โดยใช้ Python และ SOAPpy


ฉันหมายถึง "บริการเว็บ" ในความหมายที่ไม่เป็นทางการที่สุด ให้ข้อมูลผ่าน http ที่แอพอื่นจะใช้งาน อย่างที่ฉันพูดในคำถามมันน่าจะเป็น csv
Jeremy Cantrell

WSDL น่าจะเป็นมาตรฐานที่สุด ... และนั่นจะเป็นการบริโภค ...
Thufir

1

อาจจะบิด Twisted http://twistedmatrix.com/trac/


ฉันไม่มีอะไรกับ Twisted แต่นี่คือสิ่งที่ฉันต้องการอยู่ให้ห่างจาก
Jeremy Cantrell

@ Jeremy: บิดไม่หนัก
nosklo

ฉันเห็นด้วยว่าอาจเป็นเรื่องที่ค่อนข้างยุ่งยากในแวบแรก แต่ฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดย 'การพึ่งพาอย่างหนัก' มันใช้แพ็คเกจจาก python มาตรฐานเท่าที่ฉันรู้ มีชิ้นส่วนที่เคลื่อนไหวมากมายภายในโมดูล แต่สำหรับสิ่งที่เรียบง่ายคุณไม่จำเป็นต้องทำอะไรมาก
mabbit
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.