2009-05-19 4 views
11

पाइथन का उपयोग करके वेब डिज़ाइन के लिए नया ब्रांड। अपाचे अप और रनिंग, सीजीआई-बिन निर्देशिका में काम कर रहे पायथन स्क्रिप्ट का परीक्षण करें। जब मैं यूआरएल में स्पष्ट रूप से टाइप करता हूं तो वैध परिणाम प्राप्त करें: ".../cgi-bin/showenv.py"मेरे यूआरएल से "cgi-bin", ".py", आदि को कैसे छिपाना है?

लेकिन मैं नहीं चाहता कि यूआरएल उस तरह से दिखें। यहां स्टैक ओवरफ्लो पर, उदाहरण के लिए, मेरे पता बार में प्रदर्शित होने वाले यूआरएल में कभी भी गड़बड़ी का विवरण नहीं है जो उन्हें चलाने के लिए इस्तेमाल किया गया था। वे सीजीआई-बिन, .py, आदि एक्सटेंशन से साफ़ हैं। मैं उसको कैसे करू?

संपादित करें: प्रतिक्रियाओं के लिए धन्यवाद, हर एक सहायक, सीखने के लिए बहुत कुछ। मैं अब के लिए यूआरएल रिवाइटिंग के साथ जा रहा हूँ; दस्तावेज़ों में उदाहरण जो मैं वास्तव में करना चाहता हूं उसके करीब दिखता है। लेकिन मैं अजगर के लिए प्रतिबद्ध हूं, इसलिए सड़क के नीचे डब्लूएसजीआई को देखना होगा।

+1

.. मुझे आश्चर्य है कि यह प्रश्न serverfault.com के लिए बेहतर है या नहीं? (चूंकि यह वास्तव में अपाचे को कॉन्फ़िगर करने के बारे में है) –

+0

3-वर्ष अपडेट: डब्लूएसजीआई के मूल्य को देखने के लिए बहुत कम समय (दिन) लिया गया, और फिर (सप्ताह) एक ढांचे का मूल्य, जहां से Django दर्ज किया गया। खरोंच से शुरू करना, मुझे यह सब कठिन तरीका सीखना था, लेकिन यदि आप एक समान रास्ते की यात्रा कर रहे हैं, तो Django वह जगह है जहां आप समाप्त हो जाएंगे। –

उत्तर

13

वेब अनुप्रयोगों को लिखने का पाइथन तरीका सीजीआई-बिन नहीं है। यह WSGI का उपयोग कर रहा है।

डब्ल्यूएसजीआई वेब सर्वर और पायथन वेब अनुप्रयोगों या ढांचे के बीच एक मानक इंटरफ़ेस है। PEP 0333 इसे परिभाषित करता है।

सीजीआई के बजाय इसका उपयोग करने में कोई नुकसान नहीं है। और आप बहुत कुछ हासिल करेंगे। सुंदर यूआरएल केवल साफ चीजों में से एक है जिसे आप आसानी से कर सकते हैं।

इसके अलावा, एक डब्लूएसजीआई आवेदन लिखने का मतलब है कि आप किसी भी वेब सर्वर पर तैनात कर सकते हैं जो डब्लूएसजीआई इंटरफ़ेस का समर्थन करता है। अपाचे mod_wsgi का उपयोग कर ऐसा करता है।

आप उस तरह अपाचे में यह कॉन्फ़िगर कर सकते हैं:

WSGIScriptAlias /myapp /usr/local/www/wsgi-scripts/myapp.py 

फिर http://myserver.domain/myapp पर सभी अनुरोधों को के लिए जाना जाएगा myapp.py के applicationhttp://myserver.domain/myapp/something/here सहित प्रतिदेय।

उदाहरण myapp.py:

def application(environ, start_response): 
    start_response('200 OK', [('Content-type', 'text/plain')]) 
    return ['Hello World!'] 
+1

+1 (यदि मैं कर सकता था तो अधिक)। यदि आप "ग्राउंड अप" से पाइथन वेब विकास को समझना चाहते हैं, तो आपको अभी भी पूरी तरह से CGI को अनदेखा करना चाहिए। अपने स्वयं के नंगे-डब्लूएसजीआई ऐप को लिखना वाकई आसान है, और आपके लिए पाइथन फ्रेमवर्क आपके लिए लपेटने के तरीके पर एक संभाल पाने का एक अच्छा तरीका है। –

5

मुझे लगता है कि आप अपाचे कॉन्फ़िगरेशन के माध्यम से यूआरएल को फिर से लिखकर ऐसा कर सकते हैं। आप here को फिर से लिखने के लिए अपाचे दस्तावेज़ देख सकते हैं।

4

आपको यूआरएल रिवाइटिंग का उपयोग करना होगा।

यह नहीं एक noob सवाल है, यह काफी मुश्किल :)

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

आशा है कि आप इसे उपयोगी

4

बस जैसे कुछ अच्छे वेब ढांचे का उपयोग लगता है हो सकता है कर रहा है Django और आप db ORM आदि

+0

यह हमेशा एक अच्छा विचार नहीं है। यदि आप कुछ ऐसा कर रहे हैं जो वास्तव में कस्टम है तो आप हमेशा आपके द्वारा चुने गए ढांचे के सीमाओं और नियमों से प्रतिबंधित रहेंगे। –

+0

हाँ सही है, लेकिन यह सुनिश्चित नहीं है कि वह अपने –

+3

के वेब ढांचे को विकसित करना चाहते हैं, एक ढांचे का उपयोग करें - आप सीजीआई-बिन के चारों ओर लिपटे अपने स्वयं के ढांचे का आविष्कार करने से ज्यादा खुश होंगे। –

4

इस एक .htaccess है कि मैं ऐसी बात को प्राप्त करने के लिए उपयोग से एक अंश है, इस उदाहरण के लिए सभी अनुरोधों पुनर्निर्देश जैसे URL यूआरएल की तुलना में अधिक आप एक बेहतर बुनियादी ढांचे होगा, टेम्पलेट्स, हो सकता है जो कि उस फ़ाइल में index.php नहीं थे, निश्चित रूप से आपको उस फ़ाइल के भीतर सर्वर-वेरिएबल को जांचना होगा, जिसे आप देखने के लिए रीडायरेक्ट करते हैं, अनुरोध किया गया था।

या आप बस एक पुनर्लेखन नियम बनाते हैं, जहां आप ^.*\/cgi-bin\/.*\.py$ जैसे RegExp का उपयोग करते हैं, यह निर्धारित करने के लिए कि कब और क्या लिखना है। इस तरह के एक RegExp बहुत सावधानी से तैयार किया जाना चाहिए, ताकि वांछित जब पुनर्लेखन केवल होता है।

<IfModule mod_rewrite.c> 
    RewriteEngine On #activate rewriting 
    RewriteBase/ #url base for rewriting 
    RewriteCond %{REQUEST_FILENAME} !index.php #requested file is not index.php 
    RewriteCond %{REQUEST_FILENAME} !^.*\.gif$ #requested file is no .gif 
    RewriteCond %{REQUEST_FILENAME} !^.*\.jpg$ #requested file is no .jpg 
    RewriteCond %{REQUEST_FILENAME} !-d  #is not a directory 
    RewriteRule . /index.php [L]    #send it all to index.php 
</IfModule> 

ऊपर उदाहरण RewriteCond itions का उपयोग करता है निर्धारित करने के लिए जब पुनर्लेखन के लिए (.gif की, .jpeg और index.php बाहर रखा गया है)।

हम्म, तो यह पहले से ही एक लंबा पाठ है। उम्मीद है कि यह थोड़ा सहायक था, लेकिन आप अपाचे रिवाइटइंजिन के सिंटैक्स को सीखने से बचने में सक्षम नहीं होंगे।

3

आप ScriptAlias निर्देश मददगार मिल जाएगा।

ScriptAlias /urlpath /your/cgi-bin/script.py 

आप http://yourserver/urlpath के माध्यम से अपनी स्क्रिप्ट तक पहुंच सकते हैं।

आप mod_passenger में भी देख सकते हैं, हालांकि पिछली बार मैंने इसका इस्तेमाल किया था, डब्लूएसजीआई लाइब्रेरी के भीतर "द्वितीय श्रेणी का नागरिक" था- यह डब्लूएसजीआई स्क्रिप्ट का पता लगा सकता है अगर इसका उपयोग पूरे डोमेन की सेवा के लिए किया जाता था , लेकिन अन्यथा डब्लूएसजीआई ऐप चलाने के लिए कोई निर्देश नहीं हैं।

+0

यह मेरे लिए काम नहीं किया – Harsha

+0

'mod_python' के साथ अपाचे 2.4 पर काम करता है। ठंडा। – TranslucentCloud

संबंधित मुद्दे