python - পাইথন প্রোগ্রামিং pdf



কিভাবে পাইথন ওয়েব ফ্রেমওয়ার্ক, WSGI এবং CGI একসঙ্গে মাপসই (4)

আপনি CG333 একটি উদাহরণ হিসাবে প্রদর্শন হিসাবে CGI উপর WSGI চালাতে পারেন। যাইহোক, প্রতিবার যখন একটি অনুরোধ থাকে তখন একটি নতুন পাইথন ইন্টারপ্রেটার শুরু হয় এবং সমগ্র প্রসঙ্গ (ডাটাবেস সংযোগ ইত্যাদি) গড়ে তুলতে হবে যা সমস্ত সময় নেয়।

আপনি যদি WSGI চালাতে চান তবে সর্বোত্তমটি যদি আপনার হোস্ট mod_wsgi ইনস্টল করে এবং আপনার কোনও অ্যাপ্লিকেশনে নিয়ন্ত্রণ স্থগিত করার জন্য উপযুক্ত কনফিগারেশন করে।

Flup অন্য কোন ওয়েবসার্ভারের জন্য WSGI দিয়ে চালানোর অন্য উপায় যা SCGI , SCGI বা AJP বলতে পারে। আমার অভিজ্ঞতা থেকে কেবলমাত্র FCGI কাজ করে এবং এটি apache তে mod_fastcgi মাধ্যমে ব্যবহার করা যেতে পারে অথবা যদি আপনি mod_proxy_fcgi সাথে একটি পৃথক পাইথন ডেমন চালাতে পারেন।

ডাব্লুএসজিআই একটি সিকিউরিটি যা CGI এর মত অনেক, যা নিয়মনীতির একটি সেট সংজ্ঞায়িত করে যা ওয়েবসার্ভার এবং পাইথন কোডের সাথে যোগাযোগ করতে পারে, এটি Pep333 হিসাবে সংজ্ঞায়িত করা হয় । এটি সম্ভব করে তোলে যে বিভিন্ন ওয়েব সার্ভারগুলি একই অ্যাপ্লিকেশন প্রোটোকল ব্যবহার করে অনেকগুলি ফ্রেমওয়ার্ক এবং অ্যাপ্লিকেশন ব্যবহার করতে পারে। এটি খুব উপকারী এবং এটি তাই দরকারী করে তোলে।

https://ffff65535.com

আমার একটি Bluehost অ্যাকাউন্ট আছে যেখানে আমি পাইগন স্ক্রিপ্টগুলিকে CGI হিসাবে চালাতে পারি। আমি এটা সবচেয়ে সহজ CGI অনুমান, চালানোর জন্য আমি নিম্নলিখিত। .htaccess সংজ্ঞায়িত আছে:

Options +ExecCGI
AddType text/html py
AddHandler cgi-script .py

এখন, যখনই আমি পাইথন সহ ওয়েব প্রোগ্রামিং দেখি, আমি WSGI এবং এটির বেশিরভাগ ফ্রেমওয়ার্ক ব্যবহার সম্পর্কে অনেক কিছু শুনতে পাচ্ছি। কিন্তু আমি বুঝতে পারছি না এটি কীভাবে একত্রে ফিট হয়ে যায়, বিশেষ করে যখন আমার ওয়েব সার্ভার দেওয়া হয় (অপাচ একটি হোস্টের মেশিনে চলমান) এবং এমন কিছু না যা আমি সত্যিই খেলতে পারি (সংক্ষেপে .htaccess কমান্ড ব্যতীত)।

কিভাবে WSGI , CGI, এবং কাঠামো সব সংযুক্ত করা হয়? আমার মৌলিক CGI কনফিগারেশনে যদি আমি একটি ওয়েব ফ্রেমওয়ার্ক (ওয়েবপৃষ্ঠা বা CherryPy ) চালাতে চান তবে আমাকে কি জানতে, ইনস্টল করতে এবং করতে হবে? কিভাবে WSGI সমর্থন ইনস্টল করবেন?


আমি মনে করি ফ্লোরিয়ানের উত্তরটি "আপনার ওয়াশিংটনে কী আছে" সম্পর্কে আপনার প্রশ্নের অংশটি উত্তর দেয়, বিশেষত যদি আপনি PEP পড়েন।

আপনি প্রশ্নগুলির দিকে এগিয়ে যাওয়ার প্রশ্নগুলির জন্য:

WSGI, CGI, FastCGI ইত্যাদি কোড চালানোর জন্য ওয়েব সার্ভারের সমস্ত প্রোটোকল এবং উত্পাদিত গতিশীল সামগ্রী প্রদান করে। স্ট্যাটিক ওয়েব সার্ভারে এটি তুলনা করুন, যেখানে একটি সাধারণ HTML ফাইল মূলত ক্লায়েন্টের মতো বিতরণ করা হয়।

সিজিআই, ফাস্টসিজিআই এবং এসসিজিআই ভাষা অজ্ঞাত। আপনি পার্ল, পাইথন, সি, বাশ, যাই হোক না কেন যাই হোক না কেন, সিজিআই স্ক্রিপ্ট লিখতে পারেন। সিজিআইটি ইউআরএল ভিত্তিক কোন এক্সিকিউটেবলকে বলা হবে এবং এটি কীভাবে বলা হবে তা সংজ্ঞায়িত করে: আর্গুমেন্টস এবং পরিবেশ। একবার আপনার এক্সিকিউটেবল সম্পন্ন হওয়ার পরে কীভাবে ফেরত মানটি ওয়েব সার্ভারে প্রেরণ করা উচিত তাও নির্ধারণ করে। বৈচিত্রগুলি মূলত আরো অনুরোধগুলি পরিচালনা করতে সক্ষম হ'ল অপ্টিমাইজেশানগুলি, বিলম্বিততা ইত্যাদি হ্রাস করতে পারে; মৌলিক ধারণা একই।

WSGI শুধুমাত্র পাইথন হয়। একটি ভাষা অ্যাগনস্টিক প্রোটোকলের পরিবর্তে, একটি স্ট্যান্ডার্ড ফাংশন স্বাক্ষর সংজ্ঞায়িত করা হয়:

def simple_app(environ, start_response):
    """Simplest possible application object"""
    status = '200 OK'
    response_headers = [('Content-type','text/plain')]
    start_response(status, response_headers)
    return ['Hello world!\n']

এটি একটি সম্পূর্ণ (যদি সীমাবদ্ধ) WSGI অ্যাপ্লিকেশন। WSGI সমর্থন সহ একটি ওয়েব সার্ভার (যেমন apache, mod_wsgi সহ) যখনই একটি অনুরোধ আসে তখন এই ফাংশনটি আহ্বান করতে পারে।

এটি এত বড় কারণ যে আমরা HTTP GET / POST থেকে CGI এ পাইথন রূপান্তর করার নোংরা ধাপটি এড়াতে পারি, এবং আবার ফিরে যাওয়ার পথে। এটি একটি অনেক সরাসরি, পরিষ্কার এবং কার্যকর লিঙ্ক।

ওয়েব সার্ভারগুলির পিছনে চলমান দীর্ঘমেয়াদী ফ্রেমওয়ার্কগুলি আরও সহজ করে তোলে, যদি অনুরোধের জন্য যা করতে হবে তা একটি ফাংশন কল। সরল CGI সঙ্গে, আপনি প্রতিটি পৃথক অনুরোধের জন্য আপনার সম্পূর্ণ কাঠামো শুরু করতে হবে

WSGI সমর্থনের জন্য, আপনাকে একটি WSGI মডিউল ইনস্টল করতে হবে (যেমন mod_wsgi ), অথবা CherryPy বেকড (যেমন CherryPy ) সহ একটি ওয়েব সার্ভার ব্যবহার করুন। যদি এগুলি সম্ভব হয় না, তবে আপনি পিইপিতে দেওয়া CGI-WSGI সেতুটি ব্যবহার করতে পারেন।


যদি আপনি এই স্পেসে সমস্ত শর্তাবলী সম্পর্কে অস্পষ্ট হন এবং এটির মুখোমুখি হন, এটি একটি বিভ্রান্তিকর আদ্যক্ষর-বহনকারী একটি, এটি একটি সরকারী পাইথন হাওটোর রূপে একটি ভাল ব্যাকগ্রাউন্ড রিডারও রয়েছে যা CGI বনাম ফাস্টসিজিআই বনাম ডাব্লুএসজিআই এবং এর সাথে আলোচনা করে। অন: http://docs.python.org/howto/webservers.html


কিভাবে WSGI, CGI, এবং কাঠামো সব সংযুক্ত করা হয়?

Apache পোর্ট 80 এ শোনার। এটি একটি HTTP অনুরোধ পায়। এটি প্রতিক্রিয়া একটি উপায় খুঁজে পেতে অনুরোধ pararses। Apache সাড়া দেওয়ার জন্য অনেক পছন্দ আছে। সাড়া দেওয়ার এক উপায় হল একটি স্ক্রিপ্ট চালানোর জন্য CGI ব্যবহার করা। সাড়া করার আরেকটি উপায় কেবল একটি ফাইল পরিবেশন করা হয়।

সিজিআই ক্ষেত্রে, আপ্যাচি একটি পরিবেশ তৈরি করে এবং CGI প্রোটোকলের মাধ্যমে স্ক্রিপ্টকে আহ্বান করে। এটি একটি আদর্শ ইউনিক্স ফর্ক / এক্সেক পরিস্থিতি - সিজিআই উপ-প্রসেসরটি সকেট এবং স্টডআউট সহ একটি OS পরিবেশকে উত্তরাধিকারী করে। CGI সাবপ্রোসেস একটি প্রতিক্রিয়া লিখেছে, যা আপাচে ফিরে যায়; অ্যাপাচার ব্রাউজারে এই প্রতিক্রিয়া পাঠায়।

CGI আদিম এবং বিরক্তিকর। বেশিরভাগ ক্ষেত্রেই এটি প্রতিটি অনুরোধের জন্য একটি উপ-উপায়ে ফর্ক তৈরি করে এবং সাবপ্রোসেসটি প্রতিক্রিয়া শেষ করার জন্য স্টেডাউট এবং স্টারডর বন্ধ করে বন্ধ করে দিতে হবে।

WSGI একটি ইন্টারফেস যা CGI নকশা প্যাটার্নের উপর ভিত্তি করে। এটা জরুরী CGI নয় - এটি প্রতিটি অনুরোধের জন্য একটি subprocess ফর্ক করতে হবে না। এটা CGI হতে পারে, কিন্তু এটি হতে হবে না।

WSGI বেশ কয়েকটি গুরুত্বপূর্ণ উপায়ে CGI নকশা প্যাটার্ন যোগ করে। এটি আপনার জন্য HTTP অনুরোধ শিরোনামগুলিকে বিশ্লেষণ করে এবং এটি পরিবেশে যোগ করে। এটি পরিবেশে কোনও ফাইল-ভিত্তিক বস্তুর মতো পোস্ট-ভিত্তিক ইনপুট সরবরাহ করে। এটি আপনাকে একটি ফাংশন সরবরাহ করে যা প্রতিক্রিয়া গঠন করবে, আপনাকে অনেকগুলি ফর্ম্যাটিং বিশদ থেকে সংরক্ষণ করবে।

আমি যদি আমার মৌলিক CGI কনফিগারেশনে ওয়েব ফ্রেমওয়ার্ক (ওয়েবপৃষ্ঠা বা চেরিপি বলতে পারি) চালাতে চান তবে কি জানতে / ইনস্টল / করতে হবে?

একটি subprocess forking যে ব্যয়বহুল মনে রাখবেন। এই চারপাশে কাজ করার দুটি উপায় আছে।

  1. এমবেডেড mod_wsgi বা mod_python অ্যাপাচের ভিতরে পাইথন এম্বেড করে; কোন প্রক্রিয়া ফর্ক হয়। Apache সরাসরি Django অ্যাপ্লিকেশন রান।

  2. mod_fastcgi বা mod_fastcgi প্রোটোকল ব্যবহার করে Apache কে একটি পৃথক ডেমন (অথবা "দীর্ঘ-চলমান প্রক্রিয়া") সাথে ইন্টারঅ্যাক্ট করার অনুমতি দেয়। আপনি আপনার দীর্ঘ-চলমান Django প্রক্রিয়াটি শুরু করেন, তারপরে আপনি এই প্রক্রিয়ার সাথে যোগাযোগ করার জন্য আপাচের mod_fastcgi কনফিগার করেন।

উল্লেখ্য যে mod_wsgi কোনও মোডে কাজ করতে পারে: এমবেডেড বা ডেমন।

Mod_fastcgi এ আপনি পড়েন, তখন আপনি দেখতে পাবেন যে Django flup দ্বারা সরবরাহিত তথ্য থেকে একটি flup সামঞ্জস্যপূর্ণ ইন্টারফেস তৈরি করতে flup ব্যবহার করে। পাইপলাইন এই কাজ করে।

Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)

Django বিভিন্ন ইন্টারফেসের জন্য বিভিন্ন "django.core.handlers" আছে।

Mod_fastcgi এর জন্য, Django একটি manage.py runfcgi যা FLUP এবং হ্যান্ডলারকে সংহত করে।

Mod_wsgi এর জন্য, এটির জন্য একটি মূল হ্যান্ডলার রয়েছে।

কিভাবে WSGI সমর্থন ইনস্টল করবেন?

এই নির্দেশাবলী অনুসরণ করুন।

https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki

পটভূমি জন্য এই দেখুন

http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index





wsgi