آموزش CGI در برنامه نویسی پایتون ۳

3 سال پیش
 آموزش CGI در برنامه نویسی پایتون 3

آموزش CGI در برنامه نویسی پایتون ۳

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش CGI در برنامه نویسی پایتون ۳ خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش پروژه محور پایتون

Common Gateway Interface یا CGI مجموعه ای از استانداردهاست که نحوه تبادل اطلاعات بین وب سرور و یک اسکریپت سفارشی را تعریف می کند. مشخصات CGI در حال حاضر توسط NCSA نگهداری می شود.

CGI چیست؟

Common Gateway Interface یا CGI استانداردی برای برنامه های دروازه خارجی برای ارتباط با سرورهای اطلاعاتی مانند سرورهای HTTP است.

نسخه فعلی CGI/1.1 و CGI/1.2 در حال پیشرفت است.

وب گردی

برای درک مفهوم CGI، اجازه دهید ببینیم چه اتفاقی می‌افتد وقتی روی یک پیوند فوق‌العاده برای مرور یک صفحه وب یا URL خاص کلیک می‌کنیم.

  • مرورگر شما با سرور وب HTTP تماس می گیرد و URL، یعنی نام فایل را درخواست می کند.
  • وب سرور URL را تجزیه می کند و به دنبال نام فایل می گردد. اگر آن فایل را پیدا کرد، آن را به مرورگر برمی‌گرداند، در غیر این صورت یک پیغام خطایی ارسال می‌کند که نشان می‌دهد فایل اشتباهی را درخواست کرده‌اید.
  • مرورگر وب از سرور وب پاسخ می گیرد و فایل دریافتی یا پیام خطا را نمایش می دهد.

با این حال، می توان سرور HTTP را به گونه ای تنظیم کرد که هر زمان که فایلی در دایرکتوری خاصی درخواست شد، آن فایل بازگردانده نشود. در عوض به عنوان یک برنامه اجرا می شود و هر آنچه که برنامه خروجی می دهد برای نمایش مرورگر شما ارسال می شود. این تابع Common Gateway Interface یا CGI و برنامه ها را اسکریپت CGI می نامند. این برنامه های CGI می توانند یک برنامه Python Script، PERL Script، Shell Script، C یا C++ و غیره باشند.

نمودار معماری CGI
CGI Architecture

پشتیبانی و پیکربندی وب سرور

قبل از اینکه برنامه نویسی CGI را ادامه دهید، مطمئن شوید که وب سرور شما از CGI پشتیبانی می کند و برای مدیریت برنامه های CGI پیکربندی شده است. تمام برنامه های CGI که ​​باید توسط سرور HTTP اجرا شوند در یک دایرکتوری از پیش پیکربندی شده نگهداری می شوند. این دایرکتوری CGI Directory نامیده می شود و طبق قرارداد به صورت /var/www/cgi-bin نامگذاری می شود. طبق قرارداد، فایل های CGI دارای پسوند به عنوان هستند. cgi، اما می توانید فایل های خود را با پسوند پایتون .py نیز نگهداری کنید.

به طور پیش فرض، سرور لینوکس طوری پیکربندی شده است که فقط اسکریپت های موجود در فهرست cgi-bin در /var/www را اجرا کند. اگر می خواهید دایرکتوری دیگری را برای اجرای اسکریپت های CGI خود مشخص کنید، خطوط زیر را در فایل httpd.conf کامنت کنید –

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options ExecCGI
   Order allow,deny
   Allow from all
</Directory>

<Directory "/var/www/cgi-bin">
Options All
</Directory>

 

در اینجا، ما فرض می کنیم که شما وب سرور را با موفقیت راه اندازی کرده اید و می توانید هر برنامه CGI دیگری مانند Perl یا Shell و غیره را اجرا کنید.

آموزش اولین برنامه CGI

در اینجا یک پیوند ساده وجود دارد که به یک اسکریپت CGI به نام hello.py پیوند داده شده است. این فایل در پوشه /var/www/cgi-bin نگهداری می شود و دارای محتوای زیر است. قبل از اجرای برنامه CGI، مطمئن شوید که حالت فایل را با استفاده از دستور chmod 755 hello.py UNIX تغییر داده اید تا فایل قابل اجرا باشد.

#!/usr/bin/python

print ("Content-type:text/html\r\n\r\n")
print ('<html>')
print ('<head>')
print ('<title>Hello Word - First CGI Program</title>')
print ('</head>')
print ('<body>')
print ('<h2>Hello Word! This is my first CGI program</h2>')
print ('</body>')
print ('</html>')

 

نکته – خط اول در اسکریپت باید مسیری به پایتون اجرایی باشد. در لینوکس باید #!/usr/bin/python3 باشد

آدرس زیر را در مرورگر خود وارد کنید

http://localhost:8080/cgi-bin/hello.py

 

Hello Word! This is my first CGI program

 

این اسکریپت hello.py یک اسکریپت ساده پایتون است که خروجی خود را روی فایل STDOUT، یعنی صفحه نمایش می‌نویسد. یک ویژگی مهم و اضافی در دسترس است که اولین خطی است که باید چاپ شود Content-type:text/html\r\n\r\n. این خط به مرورگر بازگردانده می شود و نوع محتوای نمایش داده شده در صفحه مرورگر را مشخص می کند.

تا به حال باید مفهوم اولیه CGI را درک کرده باشید و می توانید بسیاری از برنامه های پیچیده CGI را با استفاده از پایتون بنویسید. این اسکریپت می تواند با هر سیستم خارجی دیگری نیز برای تبادل اطلاعات مانند RDBMS تعامل داشته باشد.

هدر HTTP

خط Content-type:text/html\r\n\r\n بخشی از هدر HTTP است که برای درک محتوا به مرورگر ارسال می شود. تمام هدر HTTP به شکل زیر خواهد بود –

HTTP Field Name: Field Content

For Example
Content-type: text/html\r\n\r\n

 

تعداد کمی هدر مهم HTTP دیگر وجود دارد که اغلب در برنامه نویسی CGI خود از آنها استفاده خواهید کرد.

Sr.No. Header & Description
۱ Content-type:

یک رشته MIME که فرمت فایل در حال بازگشت را مشخص می کند. به عنوان مثال Content-type:text/html است

۲ Expires: Date

تاریخی که اطلاعات نامعتبر می شود. مرورگر برای تصمیم گیری در مورد اینکه چه زمانی یک صفحه باید به روز شود استفاده می شود. یک رشته تاریخ معتبر در قالب ۰۱ ژانویه ۱۹۹۸ ساعت ۱۲:۰۰:۰۰ GMT است.

۳ Location: URL

نشانی اینترنتی که به جای URL درخواستی بازگردانده می شود. می توانید از این فیلد برای تغییر مسیر درخواست به هر فایلی استفاده کنید.

۴ Last-modified: Date

تاریخ آخرین اصلاح منبع

۵ Content-length: N

طول داده های برگردانده شده بر حسب بایت. مرورگر از این مقدار برای گزارش زمان تخمینی دانلود یک فایل استفاده می کند.

۶ Set-Cookie: String

کوکی عبور از رشته را تنظیم کنید

 

متغیرهای محیطی CGI

همه برنامه های CGI به متغیرهای محیطی زیر دسترسی دارند. این متغیرها هنگام نوشتن هر برنامه CGI نقش مهمی دارند.

Sr.No. Variable Name & Description
۱ CONTENT_TYPE

نوع داده محتوا هنگامی که مشتری در حال ارسال محتوای پیوست شده به سرور است استفاده می شود. مثلا آپلود فایل.

۲ CONTENT_LENGTH

طول اطلاعات کوئری فقط برای درخواست های POST در دسترس است.

۳ HTTP_COOKIE

کوکی های تنظیم شده را به شکل جفت کلید و ارزش برمی گرداند.

۴ HTTP_USER_AGENT

فیلد User-Agent request-header حاوی اطلاعاتی درباره عامل کاربر است که درخواست را آغاز کرده است. نام مرورگر وب است.

۵ PATH_INFO

مسیر اسکریپت CGI.

۶ QUERY_STRING

اطلاعات رمزگذاری شده با URL که با درخواست روش GET ارسال می شود.

۷ REMOTE_ADDR

آدرس IP میزبان راه دور که درخواست را ارائه می کند. این برای ورود به سیستم یا برای احراز هویت مفید است.

۸ REMOTE_HOST

نام کاملا واجد شرایط میزبان درخواست کننده. اگر این اطلاعات در دسترس نباشد، می توان از REMOTE_ADDR برای دریافت آدرس IR استفاده کرد.

۹ REQUEST_METHOD

روش مورد استفاده برای درخواست متداول ترین روش ها GET و POST هستند.

۱۰ SCRIPT_FILENAME

مسیر کامل اسکریپت CGI.

۱۱ SCRIPT_NAME

نام اسکریپت CGI.

۱۲ SERVER_NAME

نام میزبان یا آدرس IP سرور

۱۳ SERVER_SOFTWARE

نام و نسخه نرم افزاری که سرور در حال اجراست.

 

در اینجا یک برنامه کوچک CGI برای فهرست کردن تمام متغیرهای CGI وجود دارد. برای مشاهده نتیجه Get Environment روی این لینک کلیک کنید

#!/usr/bin/python

import os

print ("Content-type: text/html\r\n\r\n");
print ("<font size=+1>Environment</font><\br>");
for param in os.environ.keys():
   print ("<b>%20s</b>: %s<\br>" % (param, os.environ[param]))

 

روش های GET و POST

حتماً با موقعیت‌های زیادی برخورد کرده‌اید که باید اطلاعاتی را از مرورگر خود به وب سرور و در نهایت به برنامه CGI خود منتقل کنید. بیشتر اوقات، مرورگر از دو روش استفاده می کند، دو روش برای ارسال این اطلاعات به وب سرور. این روش ها روش GET و روش POST هستند.

انتقال اطلاعات با استفاده از روش GET

متد GET اطلاعات کاربر رمزگذاری شده را که به درخواست صفحه اضافه شده است ارسال می کند. صفحه و اطلاعات کدگذاری شده با علامت ? کاراکتر به شرح زیر –

http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2

 

  • متد GET روش پیش‌فرض برای انتقال اطلاعات از مرورگر به سرور وب است و یک رشته طولانی تولید می‌کند که در کادر Location:باکس مرورگر شما ظاهر می‌شود.
  • اگر رمز عبور یا اطلاعات حساس دیگری برای ارسال به سرور دارید، هرگز از روش GET استفاده نکنید.
  • روش GET دارای محدودیت اندازه است: فقط ۱۰۲۴ کاراکتر می تواند در یک رشته درخواست ارسال شود.
  • روش GET اطلاعات را با استفاده از هدر QUERY_STRING ارسال می کند و در برنامه CGI شما از طریق متغیر محیطی QUERY_STRING قابل دسترسی خواهد بود.

شما می توانید اطلاعات را به سادگی با الحاق جفت های کلید و مقدار به همراه هر URL منتقل کنید یا می توانید از تگ های <FORM> HTML برای انتقال اطلاعات با استفاده از روش GET استفاده کنید.

URL ساده مثال: روش دریافت
در اینجا یک URL ساده وجود دارد که با استفاده از روش GET دو مقدار را به برنامه hello_get.py ارسال می کند.

/cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI
در زیر اسکریپت hello_get.py برای مدیریت ورودی داده شده توسط مرورگر وب وجود دارد. ما از ماژول cgi استفاده می کنیم که دسترسی به اطلاعات ارسال شده را بسیار آسان می کند

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print ("Content-type:text/html\r\n\r\n")
print ("<html>")
print ("<head>")
print ("<title>Hello - Second CGI Program</title>")
print ("</head>")
print ("<body>")
print ("<h2>Hello %s %s</h2>" % (first_name, last_name))
print ("</body>")
print ("</html>")

 

این نتیجه زیر را ایجاد می کند –

Hello ZARA ALI

 

  مثال ساده FORM: روش GET

این مثال دو مقدار را با استفاده از HTML FORM و دکمه ارسال ارسال می کند. ما از همان اسکریپت CGI hello_get.py برای مدیریت این ورودی استفاده می کنیم.

<form action = "/cgi-bin/hello_get.py" method = "get">
   First Name: <input type = "text" name = "first_name">  <br />

   Last Name: <input type = "text" name = "last_name" />
   <input type = "submit" value = "Submit" />
</form>

 

در اینجا خروجی واقعی فرم بالا آمده است، نام و نام خانوادگی را وارد کرده و سپس روی دکمه ارسال کلیک کنید تا نتیجه را ببینید.

First Name: 
Last Name:  

انتقال اطلاعات با استفاده از روش POST

به طور کلی یک روش مطمئن تر برای انتقال اطلاعات به یک برنامه CGI، روش POST است. این اطلاعات را دقیقاً به روش GET بسته بندی می کند، اما به جای ارسال آن به عنوان یک رشته متن پس از یک ? در URL آن را به عنوان یک پیام جداگانه ارسال می کند. این پیام به شکل ورودی استاندارد وارد اسکریپت CGI می شود.

در زیر همان اسکریپت hello_get.py است که روش GET و همچنین POST را کنترل می کند.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"

 

اجازه دهید دوباره همان مثال بالا را در نظر بگیریم که دو مقدار را با استفاده از HTML FORM و دکمه ارسال ارسال می کند. ما از همان اسکریپت CGI hello_get.py برای مدیریت این ورودی استفاده می کنیم.

<form action = "/cgi-bin/hello_get.py" method = "post">
First Name: <input type = "text" name = "first_name"><br />
Last Name: <input type = "text" name = "last_name" />

<input type = "submit" value = "Submit" />
</form>

 

در اینجا خروجی واقعی فرم بالا آمده است. نام و نام خانوادگی را وارد کرده و سپس روی دکمه ارسال کلیک کنید تا نتیجه را ببینید.

First Name: 
Last Name:  

ارسال چک باکس داده به برنامه CGI

چک باکس ها زمانی استفاده می شوند که بیش از یک گزینه مورد نیاز است.

در اینجا به عنوان مثال کد HTML برای یک فرم با دو چک باکس – آمده است

<form action = "/cgi-bin/checkbox.cgi" method = "POST" target = "_blank">
   <input type = "checkbox" name = "maths" value = "on" /> Maths
   <input type = "checkbox" name = "physics" value = "on" /> Physics
   <input type = "submit" value = "Select Subject" />
</form>

 

نتیجه این کد شکل زیر است –

 Maths  Physics 

در زیر اسکریپت checkbox.cgi برای کنترل ورودی داده شده توسط مرورگر وب برای دکمه چک باکس وجود دارد.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('maths'):
   math_flag = "ON"
else:
   math_flag = "OFF"

if form.getvalue('physics'):
   physics_flag = "ON"
else:
   physics_flag = "OFF"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Checkbox - Third CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> CheckBox Maths is : %s</h2>" % math_flag
print "<h2> CheckBox Physics is : %s</h2>" % physics_flag
print "</body>"
print "</html>"

 

انتقال داده های دکمه رادیویی به برنامه CGI

دکمه های رادیویی زمانی استفاده می شوند که فقط یک گزینه مورد نیاز است.

در اینجا به عنوان مثال کد HTML برای یک فرم با دو دکمه رادیویی – آمده است

<form action = "/cgi-bin/radiobutton.py" method = "post" target = "_blank">
   <input type = "radio" name = "subject" value = "maths" /> Maths
   <input type = "radio" name = "subject" value = "physics" /> Physics
   <input type = "submit" value = "Select Subject" />
</form>

 

نتیجه این کد شکل زیر است –

 Maths  Physics 

در زیر اسکریپت radiobutton.py برای مدیریت ورودی داده شده توسط مرورگر وب برای دکمه رادیویی – آمده است

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('subject'):
   subject = form.getvalue('subject')
else:
   subject = "Not set"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Radio - Fourth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Selected Subject is %s</h2>" % subject
print "</body>"
print "</html>"

 

ارسال داده های ناحیه متنی به برنامه CGI

عنصر TEXTAREA زمانی استفاده می شود که متن چند خطی باید به برنامه CGI ارسال شود.

در اینجا به عنوان مثال کد HTML برای یک فرم با کادر TEXTAREA – آمده است

<form action = "/cgi-bin/textarea.py" method = "post" target = "_blank">
   <textarea name = "textcontent" cols = "40" rows = "4">
      Type your text here...
   </textarea>
   <input type = "submit" value = "Submit" />
</form>

 

نتیجه این کد شکل زیر است –

 

در زیر اسکریپت textarea.cgi برای مدیریت ورودی داده شده توسط مرورگر وب وجود دارد –

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('textcontent'):
   text_content = form.getvalue('textcontent')
else:
   text_content = "Not entered"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>";
print "<title>Text Area - Fifth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Entered Text Content is %s</h2>" % text_content
print "</body>"

 

انتقال داده های جعبه کشویی به برنامه CGI

زمانی که گزینه های زیادی در دسترس داریم اما فقط یک یا دو انتخاب می شود از جعبه کشویی استفاده می شود.

در اینجا مثال کد HTML برای یک فرم با یک کادر کشویی – است

<form action = "/cgi-bin/dropdown.py" method = "post" target = "_blank">
   <select name = "dropdown">
      <option value = "Maths" selected>Maths</option>
      <option value = "Physics">Physics</option>
   </select>
   <input type = "submit" value = "Submit"/>
</form>

 

نتیجه این کد شکل زیر است –

 

در زیر اسکریپت dropdown.py برای مدیریت ورودی داده شده توسط مرورگر وب وجود دارد.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('dropdown'):
   subject = form.getvalue('dropdown')
else:
   subject = "Not entered"

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Dropdown Box - Sixth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Selected Subject is %s</h2>" % subject
print "</body>"
print "</html>"

 

استفاده از کوکی ها در CGI

پروتکل HTTP یک پروتکل بدون حالت است. برای یک وب سایت تجاری، لازم است اطلاعات جلسه در بین صفحات مختلف حفظ شود. به عنوان مثال، ثبت نام یک کاربر پس از تکمیل بسیاری از صفحات به پایان می رسد. چگونه اطلاعات جلسه کاربر را در تمام صفحات وب حفظ کنیم؟

در بسیاری از موقعیت‌ها، استفاده از کوکی‌ها کارآمدترین روش برای به خاطر سپردن و ردیابی اولویت‌ها، خریدها، کمیسیون‌ها و سایر اطلاعات مورد نیاز برای تجربه بهتر بازدیدکنندگان یا آمار سایت است.

چگونه کار می کند؟

سرور شما برخی از داده ها را به صورت یک کوکی به مرورگر بازدیدکننده می فرستد. مرورگر ممکن است کوکی را بپذیرد. اگر اینطور باشد، به عنوان یک رکورد متن ساده در هارد دیسک بازدیدکننده ذخیره می شود. اکنون، زمانی که بازدیدکننده به صفحه دیگری در سایت شما می رسد، کوکی برای بازیابی در دسترس است. پس از بازیابی، سرور شما می داند/به خاطر می آورد که چه چیزی ذخیره شده است.

کوکی ها یک رکورد داده متنی ساده از ۵ فیلد با طول متغیر – هستند

  • انقضا – تاریخی که کوکی منقضی می شود. اگر این خالی باشد، وقتی بازدیدکننده از مرورگر خارج شود، کوکی منقضی می شود.
  • دامنه – نام دامنه سایت شما.
  • مسیر – مسیر دایرکتوری یا صفحه وب که کوکی را تنظیم می کند. اگر بخواهید کوکی را از هر فهرست یا صفحه ای بازیابی کنید، ممکن است خالی باشد.
  • امن – اگر این فیلد حاوی کلمه “secure” باشد، ممکن است کوکی فقط با یک سرور امن بازیابی شود. اگر این قسمت خالی باشد، چنین محدودیتی وجود ندارد.
  • Name = Value – کوکی ها به شکل جفت کلید و مقدار تنظیم و بازیابی می شوند.

راه اندازی کوکی ها

ارسال کوکی ها به مرورگر بسیار آسان است. این کوکی‌ها به همراه سربرگ HTTP قبل از آن به قسمت نوع محتوا ارسال می‌شوند. با فرض اینکه می خواهید UserID و Password را به عنوان کوکی تنظیم کنید. تنظیم کوکی ها به صورت زیر انجام می شود –

#!/usr/bin/python
print "Set-Cookie:UserID = XYZ;\r\n"
print "Set-Cookie:Password = XYZ123;\r\n"
print "Set-Cookie:Expires = Tuesday, 31-Dec-2007 23:12:40 GMT;\r\n"
print "Set-Cookie:Domain = www.tutorialspoint.com;\r\n"
print "Set-Cookie:Path = /perl;\n"
print "Content-type:text/html\r\n\r\n"
...........Rest of the HTML Content....

 

از این مثال، شما باید نحوه تنظیم کوکی ها را درک کرده باشید. ما از هدر HTTP Set-Cookie برای تنظیم کوکی ها استفاده می کنیم.

تنظیم ویژگی های کوکی مانند Expires، Domain و Path اختیاری است. قابل توجه است که کوکی ها قبل از ارسال خط جادویی “Content-type:text/html\r\n\r\n” تنظیم می شوند.

بازیابی کوکی ها

بازیابی تمام کوکی های تنظیم شده بسیار آسان است. کوکی‌ها در متغیر محیطی CGI HTTP_COOKIE ذخیره می‌شوند و شکل زیر خواهند داشت:

key1 = value1;key2 = value2;key3 = value3....

 

در اینجا مثالی از نحوه بازیابی کوکی ها آورده شده است.

#!/usr/bin/python

# Import modules for CGI handling 
from os import environ
import cgi, cgitb

if environ.has_key('HTTP_COOKIE'):
   for cookie in map(strip, split(environ['HTTP_COOKIE'], ';')):
      (key, value ) = split(cookie, '=');
      if key == "UserID":
         user_id = value

      if key == "Password":
         password = value

print "User ID  = %s" % user_id
print "Password = %s" % password

 

این نتیجه زیر را برای کوکی های تنظیم شده توسط اسکریپت بالا ایجاد می کند

User ID = XYZ
Password = XYZ123

 

نمونه آپلود فایل

برای آپلود یک فایل، فرم HTML باید دارای ویژگی enctype باشد که روی multipart/form-data تنظیم شده است. تگ ورودی با نوع فایل یک دکمه “مرور” ایجاد می کند.

<html>
   <body>
      <form enctype = "multipart/form-data" action = "save_file.py" method = "post">
      <p>File: <input type = "file" name = "filename" /></p>
      <p><input type = "submit" value = "Upload" /></p>
      </form>
   </body>
</html>

 

نتیجه این کد شکل زیر است –

File: 

مثال بالا به طور عمدی غیرفعال شده است تا افراد در حال آپلود فایل در سرور ما ذخیره شوند، اما می توانید کد بالا را با سرور خود امتحان کنید.

در اینجا اسکریپت save_file.py برای مدیریت آپلود فایل وجود دارد

#!/usr/bin/python

import cgi, os
import cgitb; cgitb.enable()

form = cgi.FieldStorage()

# Get filename here.
fileitem = form['filename']

# Test if the file was uploaded
if fileitem.filename:
   # strip leading path from file name to avoid 
   # directory traversal attacks
   fn = os.path.basename(fileitem.filename)
   open('/tmp/' + fn, 'wb').write(fileitem.file.read())

   message = 'The file "' + fn + '" was uploaded successfully'
   
else:
   message = 'No file was uploaded'
   
print """\
Content-Type: text/html\n
<html>
   <body>
      <p>%s</p>
   </body>
</html>
""" % (message,)

 

اگر اسکریپت بالا را روی یونیکس/لینوکس اجرا می‌کنید، باید مراقب جایگزین کردن جداکننده فایل به شرح زیر باشید، در غیر این صورت در ماشین ویندوز شما در بالای دستور open() باید به خوبی کار کند.

fn = os.path.basename(fileitem.filename.replace("\\", "/" ))

 

منبع.

 

لیست جلسات قبل آموزش برنامه نوبسی پایتون ۳

  1. آموزش برنامه نویسی پایتون ۳
  2. آموزش موارد جدید در برنامه نویسی پایتون ۳
  3. آموزش مرور کلی برنامه نویسی پایتون ۳
  4. آموزش راه اندازی محیط برنامه نویسی پایتون ۳
  5. آموزش نحو در برنامه نویسی پایتون ۳
  6. آموزش انواع متغیرها در برنامه نویسی پایتون ۳
  7.  آموزش عملگرهای پایه در برنامه نویسی پایتون ۳
  8.  آموزش تصمیم گیری در برنامه نویسی پایتون ۳
  9.  آموزش حلقه ها در برنامه نویسی پایتون ۳
  10. آموزش اعداد در برنامه نویسی پایتون ۳
  11. آموزش رشته ها در برنامه نویسی پایتون ۳
  12.  آموزش لیست ها در برنامه نویسی پایتون ۳
  13.  آموزش تاپل ها در برنامه نویسی پایتون ۳
  14. آموزش دیکشنری در برنامه نویسی پایتون ۳
  15.  آموزش تاریخ و زمان در برنامه نویسی پایتون ۳
  16.  آموزش توابع در برنامه نویسی پایتون ۳
  17. آموزش ماژول ها در برنامه نویسی پایتون ۳
  18. آموزش فایل های ورودی/خروجی در برنامه نویسی پایتون ۳
  19. آموزش مدیریت استثنا در برنامه نویسی پایتون ۳
  20. آموزش شی گرایی در برنامه نویسی پایتون ۳
  21.  آموزش عبارات منظم در برنامه نویسی پایتون ۳
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه