পাইথনে পোষ্ট এবং জিইটি ভেরিয়েবল কীভাবে পরিচালনা করা হয়?


135

পিএইচপি-তে আপনি কেবল $_POSTপোস্টের $_GETজন্য এবং জিইটি (কোয়েরি স্ট্রিং) ভেরিয়েবলের জন্য ব্যবহার করতে পারেন । পাইথন সমতুল্য কি?


আপনি কি কোনও সিজিআই স্ক্রিপ্ট, মোড_পাইথন, বা জ্যাঙ্গো (বা অন্যান্য কাঠামো) অ্যাপ্লিকেশন লিখছেন? উত্তরটি আরও কিছু তথ্যের উপর নির্ভর করে ...
রব

আপনি এই প্রতিটি জন্য নমুনা কোড সরবরাহ করতে পারেন?
ক্লিক করুন

2
সিজিআই, মোড_পাইথন, জ্যাঙ্গো, চেরিপাই এবং পাইলনগুলি কোড নমুনা নয়। তারা পাইথন ওয়েব ফ্রেমওয়ার্ক যা জিইটি এবং পোস্ট পরিচালনা করে। তথ্যের জন্য wiki.python.org/moin/WebFrameworks দেখুন । আপনার প্রশ্ন - যেমন জিজ্ঞাসা করা হয়েছে - উত্তর দেওয়া যাবে না।
এস .লট

উত্তর:


246

মনে করুন আপনি এটির সাথে এইচটিএমএল ফর্ম পোস্ট করছেন:

<input type="text" name="username">

যদি কাঁচা সিজি ব্যবহার করেন :

import cgi
form = cgi.FieldStorage()
print form["username"]

ব্যবহার যদি জ্যাঙ্গো , pylons , বোতল বা পিরামিড :

print request.GET['username'] # for GET form method
print request.POST['username'] # for POST form method

টার্বোগার্স ব্যবহার করে , চেরিপি :

from cherrypy import request
print request.params['username']

Web.py :

form = web.input()
print form.username

ওয়ার্কজেগ :

print request.form['username']

চেরিপি বা টার্বোগার্স ব্যবহার করে, আপনি সরাসরি কোনও পরামিতি গ্রহণ করে আপনার হ্যান্ডলার ফাংশনটিও সংজ্ঞায়িত করতে পারেন:

def index(self, username):
    print username

গুগল অ্যাপ ইঞ্জিন :

class SomeHandler(webapp2.RequestHandler):
    def post(self):
        name = self.request.get('username') # this will get the value from the field named username
        self.response.write(name) # this will write on the document

সুতরাং আপনাকে সত্যিই সেই ফ্রেমওয়ার্কগুলির একটি বেছে নিতে হবে।


18
ব্যবহার import cgi, তাই না print form["username"].value?
জে। কাটজভিনেল

আমি ব্যবহার Bottleকরি যা আমি বিশ্বাস করি ব্যবহারগুলি wsgi, কেউ কি সেই পরিস্থিতিতে ব্যবহারের সমতুল্য পোস্ট করতে পারে? উপরের প্রতিক্রিয়াটি আমি পরিস্কারভাবে ব্যাখ্যা নিয়ে এসেছি, এটিতে আমার দৃশ্যের অন্তর্ভুক্ত নেই।
ব্যবহারকারী 1063287

2
ফিল্ডস্টোরেজ পাইথন 3 এ বিভক্ত, আপনি এটির সাথে সমস্যার সম্মুখীন হতে পারেন। bugs.python.org/issue6234
নিউক্লিয়ারপিয়ন

2
আমার আগের মন্তব্যে আমাকে স্পষ্ট করার অনুমতি দিন; এই পৃষ্ঠা: lucumr.pocoo.org/2013/7/2/the-updated-guide-to- ইউনিকোড আরও ভালভাবে এটি ব্যাখ্যা করে। এনকোডিংয়ের কারণে পাইথন 3 তে ফিল্ডস্টোরেজ () ব্যবহার করবেন না।
নিউক্লিয়ারপিয়ন

ফ্লাস্কের জন্য এটি কিছুটা আলাদা: অনুরোধ.আর্গস.জেট ('ব্যবহারকারীর নাম')
দাম্জন পাভলিকা

35

আমি জানি এটি একটি পুরানো প্রশ্ন। তবুও এটি আশ্চর্যজনক যে কোনও ভাল উত্তর দেওয়া হয়নি।

সবার আগে প্রশ্নটির কাঠামোর উল্লেখ না করে পুরোপুরি বৈধ। কনটেক্সট একটি পিএইচপি ভাষার সমতুল্য। পাইথনে ক্যোরি স্ট্রিং প্যারামিটারগুলি পাওয়ার অনেকগুলি উপায় থাকলেও ফ্রেমওয়ার্ক ভেরিয়েবলগুলি কেবল সুবিধামতভাবে পপুলেটেড। পিএইচপি-তে, $_GETএবং $_POSTসুবিধার ভেরিয়েবলগুলিও রয়েছে। এগুলি যথাক্রমে QUERY_URI এবং php: // ইনপুট থেকে পার্স করা হয়েছে।

পাইথনে, এই ফাংশনগুলি হবে os.getenv('QUERY_STRING')এবং sys.stdin.read()। ওএস এবং সিস মডিউলগুলি আমদানি করতে মনে রাখবেন।

আমাদের এখানে "সিজিআই" শব্দটি সম্পর্কে সতর্কতা অবলম্বন করতে হবে, বিশেষত ওয়েব সার্ভারের সাথে ইন্টারফেস করার সময় দুটি ভাষা এবং তাদের সাধারণতার বিষয়ে কথা বলার সময়। ১. সিজিআই, প্রোটোকল হিসাবে, এইচটিটিপি প্রোটোকলে ডেটা পরিবহন প্রক্রিয়াটি সংজ্ঞায়িত করে। ২. পাইগনকে অ্যাপাচে সিজিআই-স্ক্রিপ্ট হিসাবে চালনার জন্য কনফিগার করা যেতে পারে। ৩. পাইথনের সিজিআই মডিউলটি কিছু সুবিধাজনক ফাংশন সরবরাহ করে।

যেহেতু এইচটিটিপি প্রোটোকলটি ভাষা-স্বতন্ত্র, এবং অ্যাপাচের সিজিআই এক্সটেনশনটিও ভাষা-স্বতন্ত্র, জিইটি এবং পোষ্ট প্যারামিটারগুলি ভাষাগুলিতে কেবল বাক্যবিন্যাসের পার্থক্য বহন করে।

জিইটি অভিধান তৈরি করতে পাইথনের রুটিনটি এখানে:

GET={}
args=os.getenv("QUERY_STRING").split('&')

for arg in args: 
    t=arg.split('=')
    if len(t)>1: k,v=arg.split('='); GET[k]=v

এবং পোস্টের জন্য:

POST={}
args=sys.stdin.read().split('&')

for arg in args: 
    t=arg.split('=')
    if len(t)>1: k, v=arg.split('='); POST[k]=v

আপনি এখন নিম্নলিখিত হিসাবে ক্ষেত্রগুলি অ্যাক্সেস করতে পারেন:

print GET.get('user_id')
print POST.get('user_name')

আমার আরও উল্লেখ করতে হবে যে সিজিআই মডিউলটি ভাল কাজ করে না। এই HTTP অনুরোধ বিবেচনা করুন:

POST / test.py?user_id=6

user_name=Bob&age=30

ব্যবহারের CGI.FieldStorage().getvalue('user_id')ফলে একটি নাল পয়েন্টার ব্যতিক্রম ঘটবে কারণ মডিউল অন্ধভাবে পোষ্টের ডেটা পরীক্ষা করে, কোনও পোস্টের অনুরোধ জিইটি প্যারামিটার বহন করতে পারে এই বিষয়টি উপেক্ষা করে।


: আমি এই ত্রুটিটি পেয়েছিলেন AttributeError: 'NoneType' object has no attribute 'split'ব্যবহার CGIসঙ্গে Python2.7
candlejack

1
ত্রুটি সম্পর্কে @ ক্যান্ডলিজ্যাক বলেছেন, এইভাবে যুক্তি পাওয়ার চেষ্টা করুন POST.get('user_name', 'default_value')
জর্জ সিগগ্রোগলু

@ জর্জিগ সিগৌরোগলু 'ডিফল্ট_মূল্য' জিনিসটি আমার সমস্যা সমাধান করেছে। ধন্যবাদ!
umbe1987

1
অবশ্যই এখন পর্যন্ত আমার প্রিয় উত্তর! +1
umbe1987

QUERY_STRING ম্যাকের কোনও বৈধ সূচক নয়
স্যামুয়েল ইভ

31

আমি নসক্লো এর উত্তর খুব বিস্তৃত এবং দরকারী খুঁজে পেয়েছি! তাদের মতো, আমার মতো যারাও কাঁচা অনুরোধের ডেটা সরাসরি ব্যবহার করতে পারে বলে মনে হতে পারে, আমি এটি করার উপায় যুক্ত করতে চাই:

import os, sys

# the query string, which contains the raw GET data
# (For example, for http://example.com/myscript.py?a=b&c=d&e
# this is "a=b&c=d&e")
os.getenv("QUERY_STRING")

# the raw POST data
sys.stdin.read()

আমি সিজিআই ফাইলটিতে একটি পদ্ধতি কল করার চেষ্টা করছি । একটি উদাহরণ ইউআরএল http://www.myserver.com/cgi-bin/cgi.py/ThisIsMyMethod। নিম্নলিখিত পরিবেশগত পরিবর্তনগুলি সম্পর্কিত: os.environ.get('PATH_INFO')যা পদ্ধতির নাম পায় (যেমন: / ThisIsMyMethod) এবং os.environ.get('SCRIPT_NAME')যা ওয়েব হোস্টের মূল ফোল্ডার (যেমন: /cgi-bin/cgi.py) থেকে স্ক্রিপ্টের পথ সরবরাহ করে। আমার ক্ষেত্রে, QUERY_STRING ফাঁকা, যেমন আমি পোস্ট ব্যবহার করছি।
নিউক্লিয়ার পিওন

28

সেগুলি সিজিআই ফিল্ডস্টোরেজ অবজেক্টে সঞ্চিত রয়েছে।

import cgi
form = cgi.FieldStorage()

print "The user entered %s" % form.getvalue("uservalue")

2
-1। অনুরোধ অবজেক্টের বেশ কয়েকটি প্রতিনিধিত্ব রয়েছে, যা ব্যবহৃত libs / ফ্রেমওয়ার্কের উপর নির্ভর করে।
ব্রুনো desthuilliers

10
আপনি কেন -1 করেছেন তা আমি নিশ্চিত নই। মানে, আমি কী কাজ দিয়েছি। সম্ভবত তিনি একটি কাঠামো ব্যবহার করতে অক্ষম। এছাড়াও, বেশিরভাগ ফ্রেমওয়ার্কগুলি কেবল এটি ব্যাকগ্রাউন্ডে ব্যবহার করে না?
ইভান ফসমার্ক

4
-1 করতে বোকা ছিলাম, আমি এটির ভারসাম্য বজায় রাখতে +1 করেছি, এবং আমি মনে করি এটি একটি সেরা পদ্ধতি কারণ এটি একটি স্টিং দেয় (যা জিজ্ঞাসা করা হয়)
joedborg

1
@ লিয়াম আপনি কেন কোনওটি পাচ্ছেন না তা নিশ্চিত নন, তবে এই পোস্টটি 6 বছরেরও বেশি পুরানো, সুতরাং যদি কিছু পরিবর্তন হয়ে যায় তবে আমি সন্দেহ করব না।
ইভান ফসমার্ক

@ ইভানফসমার্ক এটি ব্যবহার করে আমি কোনও মান পাচ্ছি না। আমি যখন সিজি.ফিল্ডস্টোরেশন থেকে প্রাপ্ত মান মুদ্রণ করি তখন ফিল্ডস্টোরেজ (কিছুই নয়, কিছুই নয়, []) এটাই হয়। আমি এখানে একটি সম্পূর্ণ প্রশ্ন পোস্ট করেছি stackoverflow.com/questions/38024516/… কোনও সাহায্যের প্রশংসা করা হবে।
চোর সিপাহী

1

এটি আপনি সিজিআই কাঠামো হিসাবে কী ব্যবহার করেন তার উপর কিছুটা নির্ভর করে তবে সেগুলি প্রোগ্রামে অ্যাক্সেসযোগ্য অভিধানে উপলব্ধ। আমি আপনাকে দস্তাবেজের দিকে নির্দেশ করব, তবে আমি এখনই পাইথন.আর.গুয়েজ পাচ্ছি না। তবে mail.python.org এ এই নোটটি আপনাকে প্রথম পয়েন্টার দেবে । আরও জন্য সিজিআই এবং ইউআরএলএলআইবি পাইথন লাইবস দেখুন।

হালনাগাদ

ঠিক আছে, সেই লিঙ্কটি ফাঁস হয়ে গেল। এখানে বেসিক wsgi রেফ


আপনি যদি কোনও লিঙ্ক অনুসরণ করতে যথেষ্ট উচ্চাভিলাষী না হন তবে আমি লিঙ্কটি থেকে কাটতে এবং আটকানোর মতো উচ্চাকাঙ্ক্ষী নই।
চার্লি মার্টিন

1
এবং এখন লিঙ্কটি মারা গেছে এবং সে কারণেই প্রত্যেকে এই জাতীয় উত্তরগুলিকে ঘৃণা করে এবং সেগুলিকে নীচে রাখে। অভিনন্দন।
জন টাইরি

2
আপনি জানেন, প্রতিবার যখন আমি কারও কাছ থেকে বিচক্ষণ হয়ে একটি মন্তব্য পেয়েছি যে পাঁচ - প্রায় ছয় বছরের পুরানো উত্তরটির এখন একটি ভাঙা লিঙ্ক আছে, বলি না, একটি প্রতিস্থাপনের লিঙ্ক যুক্ত করে, আমি বাজি ধরতে পারি যে এটি রেপ <1000.
চার্লি মার্টিন

যদি আমি জানতাম যে প্রতিস্থাপনের লিঙ্কটি কোথায় যেতে হবে (ইঙ্গিত, আপনার লিঙ্কটি কাজ করে না বলে আমি করিনি) আমি এই প্রশ্নটি খুঁজছি না।
জন Tyree

আপনি পারে সবসময় 'সিজিআই এবং URLLIB পাইথন লিব' সম্পর্কে ইঙ্গিত চেষ্টা আমি অনুমান।
চার্লি মার্টিন

0

পাইথন কেবল একটি ভাষা, জিইটি এবং পোষ্ট ডেটা পেতে আপনার পাইথনে লিখিত একটি ওয়েব ফ্রেমওয়ার্ক বা টুলকিট দরকার। জাজানো অন্যতম, চার্লি যেমন উল্লেখ করেছেন, সিজি এবং ইউরালিব মানক মডিউলগুলি অন্য। এছাড়াও পাওয়া যাচ্ছে টার্বোগার্স, পাইলনস, চেরিপাই, ওয়েব.পি, মোড_প্যাথন, ফাস্টকিজি ইত্যাদি etc.

জ্যাঙ্গোতে, আপনার দর্শনীয় ফাংশনগুলি অনুরোধের যুক্তিটি গ্রহণ করে যার অনুরোধ রয়েছে G জিইটি এবং অনুরোধ Pপষ্ট করুন। অন্যান্য ফ্রেমওয়ার্কগুলি এটি ভিন্নভাবে করবে।


13
"জিইটি এবং পোস্টের ডেটা পেতে আপনার পাইথনে লিখিত একটি ওয়েব ফ্রেমওয়ার্ক বা টুলকিট প্রয়োজন" - সত্য নয়
জেমস টমাসিনো

2
আমি জেমসের সাথে একমত, এগুলি পাইথনে লেখা থাকলে সেগুলি স্পষ্টতই আবার নিজের পছন্দকে লেখা যেতে পারে।
রবিন স্যান্ডস্ট্রোম

ঠিক আছে আমি পাইথনে একজন নতুন আগত এবং আমি ভেবেছিলাম যে এটি সম্ভব হতে পারে না যে আমাকে কোনও কাঠামো ব্যবহার করতে হবে। আমার প্রশ্ন উপায় কী? আমি কোনও কাঠামো ব্যবহার করছি না এবং আমি অ্যাপাচি 2 পাইথন স্ক্রিপ্ট পরিবেশন করেছি। পিএইচপি-তে $ _GET বা $ _POST এর ব্যবহার হিসাবে একটি মৃত সহজ উপায়টি দেখানো ভাল হবে।
কালো জ্ঞান

1
@ জামেসটমাসিনো প্রশ্নের প্রসঙ্গে, এটি সত্য is
পিটারহ - মনিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.