Latest web development tutorials

برمجة Python3 CGI

ما هو CGI

CGI يحتفظ بها حاليا التقييم الذاتي، يتم تعريف التقييم الذاتي CGI على النحو التالي:

CGI (واجهة العبارة الشائعة)، واجهة العبارة الشائعة، وهو برنامج يعمل على الخادم، مثل: ملقم HTTP، واجهة العميل توفير نفس صفحة HTML.


تصفح الإنترنت

لفهم أفضل لكيفية يعمل CGI، يمكننا أن تنقر على وصلة على صفحة ويب أو URL من هذه العملية:

  • 1، استخدام المتصفح للوصول إلى URL والاتصال إلى ملقم HTTP على شبكة الإنترنت.
  • 2، يتلقى ملقم ويب سيتم تحليل رسالة طلب URL وتبدو الوصول إلى الملفات على الخادم إذا كان هناك، إذا كان هناك للعودة محتويات الملف، وإلا فإنها ترجع رسالة خطأ.
  • 3، يتلقى متصفح المعلومات من الخادم ويعرض الملف أو خطأ الرسائل الواردة.

ويمكن لبرامج CGI يكون السيناريو بيثون، المخطوطة، شيل، C أو C ++ البرامج.


CGI الرسم البياني

cgiarch


تكوين خادم الويب والدعم

قبل إجراء البرمجة CGI، تأكد من أنه قد تم تكوين ملقم ويب لدعم CGI ومعالج CGI.

أباتشي يدعم التكوين CGI:

إعداد دليل CGI:

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

يتم تخزين كل ملقم HTTP لتنفيذ برامج CGI في دليل تكوين مسبقا. ويسمى هذا الدليل الدليل CGI، والمؤتمرات، وأطلق عليها اسم / فار / على شبكة الاتصالات العالمية / الدليل-CGI بن.

ملف CGI تمديد .cgi، الثعبان يمكن أيضا استخدام ملحق .py.

افتراضيا، تكوين الملقم تشغيل لينكس دليل CGI بن هو / فار / على شبكة الاتصالات العالمية.

إذا كنت ترغب في تحديد دليل آخر لتشغيل البرامج النصية CGI، يمكنك تعديل ملف تكوين ملف httpd.conf على النحو التالي:

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

إضافة .py AddHandler لاحقة، حتى نتمكن من الوصول إلى نهاية .py ملف البرنامج النصي الثعبان:

AddHandler cgi-script .cgi .pl .py

برنامج CGI الأول

نحن نستخدم بيثون لإنشاء برنامج CGI الأول يسمى hello.py، يتم وضع الملف في / فار / على شبكة الاتصالات العالمية /-CGI بن دليل، على النحو التالي:

#!/usr/bin/python3

print ("Content-type:text/html")
print ()                             # 空行,告诉服务器结束头部
print ('<html>')
print ('<head>')
print ('<meta charset="utf-8">')
print ('<title>Hello Word - 我的第一个 CGI 程序!</title>')
print ('</head>')
print ('<body>')
print ('<h2>Hello Word! 我是来自本教程的第一CGI程序</h2>')
print ('</body>')
print ('</html>')

بعد حفظ hello.py ملف تعديل، تعديل أذونات الملف إلى 755:

chmod 755 hello.py 

يتم عرض البرنامج المذكور أعلاه في المتصفح للوصول إلى النتائج على النحو التالي:

وhello.py هذا السيناريو هو السيناريو بيثون بسيط، سيناريو أول خط إنتاج "نوع المحتوى: نص / أتش تي أم أل" لإرسالها إلى نوع المتصفح وتخبر المتصفح لعرض محتوى بأنه "نص / أتش تي أم أل".

يستخدم إخراج الطباعة مع سطر فارغ لنقول للنهاية خادم معلومات الرأس.


رأس HTTP

محتويات الملف hello.py في: جزء من رأس HTTP هو، فإنه سيتم إرسال "نوع المحتوى النص / أتش تي أم أل" إلى نوع محتوى المتصفح يروي ملفات المتصفح.

شكل رأس HTTP هو على النحو التالي:

HTTP 字段名: 字段内容

على سبيل المثال:

Content-type: text/html

يصف الجدول التالي وغالبا ما تستخدم هذه المعلومات في برامج CGI رأس HTTP:

رئيس وصف
المحتوى من نوع: كيان MIME المقابلة لطلب المعلومات. على سبيل المثال: نوع المحتوى: نص / HTML
ينتهي: التاريخ تاريخ استجابة والوقت انتهى
الموقع: URL لإعادة توجيه المتلقي لطلب URL غير موقع لإتمام الطلب أو تحديد موارد جديدة
آخر تعديل: التاريخ المورد المطلوب آخر تعديل
المحتوى طول: N طلب محتوى طول
تعيين ملف تعريف الارتباط: سلسلة إعدادات المتشعب كوكي

متغيرات البيئة CGI

وقد تلقى جميع برامج CGI متغيرات البيئة التالية، التي لعبت دورا مهما في برنامج CGI:

اسم المتغير وصف
CONTENT_TYPE تشير هذه القيمة إلى متغير البيئة لنوع MIME نقل المعلومات. في الوقت الحاضر، ومتغيرات البيئة بشكل عام CONTENT_TYPE: وقال urlencoded س-وو-شكل التطبيق / أن البيانات من النموذج HTML.
CONTENT_LENGTH إذا كانت المعلومات الخادم واسطة نقل وبرنامج CGI هي وظيفة، حتى لو كانت بيئة متغيرة STDIN إدخال عدد البايتات التي يمكن قراءة بيانات صالحة من هذا المعيار. هذا متغير البيئة عند قراءة البيانات المدخلة يجب استخدامها.
HTTP_COOKIE المحتوى كوكي ضمن العميل.
HTTP_USER_AGENT توفير المعلومات يتضمن رقم الإصدار من متصفح العميل أو بيانات الملكية الأخرى.
PATH_INFO قيمة متغير البيئة هذا يشير إلى اسم البرنامج CGI مباشرة بعد معلومات المسار إضافية. في كثير من الأحيان يبدو كبرنامج حجة CGI.
QUERY_STRING إذا كانت المعلومات الخادم واسطة نقل وبرنامج CGI هي المعلومات GET، وقيمة هذا المتغير البيئة حتى لو مرت. ويتبع هذه المعلومات من قبل اسم البرنامج CGI، سواء في الوسط مع علامة استفهام "؟" فاصل.
REMOTE_ADDR قيمة متغير البيئة هذا هو عنوان IP للعميل يرسل الطلب، على سبيل المثال، 192.168.1.67 أعلاه. هذه القيمة هي دائما موجودة. وهو الحاجة إلى توفير عميل ويب لمعرف فريد ملقم ويب يمكن استخدامها في برامج CGI للتمييز بين عميل ويب مختلفة.
REMOTE_HOST تحتوي على قيمة هذا المتغير بيئة اسم المضيف للعميل طلب من المجموعة الاستشارية لاندونيسيا. إذا كان لا تريد التحقق، لا تحتاج إلى تعريف هذا المتغير البيئة.
REQUEST_METHOD أنه يوفر طريقة تسمى النصي. لHTTP النصي / بروتوكول 1.0 فقط الحصول على وظيفة ذات مغزى.
SCRIPT_FILENAME المسار الكامل لنصوص CGI
البرمجي اسم البرنامج النصي CGI
SERVER_NAME هذا هو اسم المضيف، اسم مستعار، أو عنوان IP لخادم الويب الخاص بك.
SERVER_SOFTWARE تحتوي على قيمة متغير البيئة هذا اسم البرنامج دعوة CGI ورقم الإصدار خادم HTTP. على سبيل المثال، فإن القيمة أعلاه من طراز أباتشي / 2.2.14 (يونكس)

هنا هو بسيط متغيرات البيئة الناتج CGI النصي CGI:

#!/usr/bin/python3

import os

print ("Content-type: text/html")
print ()
print ("<meta charset=\"utf-8\">")
print ("<b>环境变量</b><br>")
print ("<ul>")
for key in os.environ.keys():
    print ("<li><span style='color:green'>%30s </span> : %s </li>" % (key,os.environ[key]))
print ("</ul>")

حفظ النقاط test.py أعلاه، وتعديل أذونات الملف إلى 755، ونتائج التنفيذ هي كما يلي:


الحصول على وظيفة طرق

مستعرض العميل إلى الملقم لتقديم المعلومات بطريقتين، وكلاهما الأسلوب هو الحصول على وسائل POST.

استخدام الأسلوب GET لنقل البيانات

الحصول على طريقة لإرسال معلومات المستخدم المشفرة إلى خادم، يرد المعلومات والبيانات في URL طلب الصفحة إلى عدد مقسمة على النحو التالي "؟":

http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2
طلبات GET حول بعض التعليقات الأخرى:
  • طلب GET يمكن أن يكون مؤقتا
  • يبقى طلب GET في تاريخ المتصفح
  • GET طلبات يمكن وضع إشارة
  • GET طلبات لا ينبغي أن تستخدم عند التعامل مع بيانات حساسة
  • طلبات GET لها قيود طول
  • GET ينبغي أن تستخدم طلبات فقط لاسترداد البيانات

أمثلة على رابط بسيط: GET طريقة

ما يلي هو عنوان بسيط، وذلك باستخدام طريقة GET لإرسال اثنين من المعلمات إلى hello_get.py البرنامج:

/cgi-bin/test.py?name=本教程&url=http://www.w3big.com

ملف كود hello_get.py:

#!/usr/bin/python3

# CGI处理模块
import cgi, cgitb 

# 创建 FieldStorage 的实例化
form = cgi.FieldStorage() 

# 获取数据
site_name = form.getvalue('name')
site_url  = form.getvalue('url')

print ("Content-type:text/html")
print ()
print ("<html>")
print ("<head>")
print ("<meta charset=\"utf-8\">")
print ("<title>本教程 CGI 测试实例</title>")
print ("</head>")
print ("<body>")
print ("<h2>%s官网:%s</h2>" % (site_name, site_url))
print ("</body>")
print ("</html>")

بعد حفظ hello_get.py ملف تعديل، تعديل أذونات الملف إلى 755:

chmod 755 hello_get.py 

يطلب المتصفح الإخراج:

ومن الأمثلة على نموذج بسيط: GET طريقة

وفيما يلي اثنين من إرسال البيانات إلى الخادم باستخدام طريقة GET عبر نموذج HTML، قدم نفس الملف hello_get.py النصي الملقم، رمز hello_get.html على النحو التالي:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/hello_get.py" method="get">
站点名称: <input type="text" name="name">  <br />

站点 URL: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>

افتراضيا، الدليل المجموعة الاستشارية لاندونيسيا بن يمكن تخزين ملف نصي فقط، وسوف نكون تحت الدليل اختبار، تعديل الملف أذونات hello_get.html تخزينها على شكل 755:

chmod 755 hello_get.html

عرض المتحركة على النحو التالي:

استخدام الأسلوب POST لتمرير البيانات

استخدام الأسلوب POST لتمرير البيانات إلى الخادم هو أكثر أمنا وموثوق بها، وبعض المعلومات الحساسة مثل كلمات السر حاجة المستخدم لاستخدام وظيفة لنقل البيانات.

وفيما يلي أيضا hello_get.py، فإنه يمكن أيضا التعامل مع بيانات النموذج الوظائف المقدمة من قبل المتصفح:

#!/usr/bin/python3

# CGI处理模块
import cgi, cgitb 

# 创建 FieldStorage 的实例化
form = cgi.FieldStorage() 

# 获取数据
site_name = form.getvalue('name')
site_url  = form.getvalue('url')

print ("Content-type:text/html")
print ()
print ("<html>")
print ("<head>")
print ("<meta charset=\"utf-8\">")
print ("<title>本教程 CGI 测试实例</title>")
print ("</head>")
print ("<body>")
print ("<h2>%s官网:%s</h2>" % (site_name, site_url))
print ("</body>")
print ("</html>")

فيما يلي نموذج لإرسال البيانات إلى hello_get.py النصي الخادم عن طريق أسلوب POST (أسلوب = "آخر"):

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/hello_get.py" method="post">
站点名称: <input type="text" name="name">  <br />

站点 URL: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>
</form>

عرض المتحركة على النحو التالي:

برنامج CGI لتمرير البيانات من خلال مربع

مربع تستخدم لتقديم واحد أو أكثر من البيانات الخيار، رمز HTML كما يلي:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/checkbox.py" method="POST" target="_blank">
<input type="checkbox" name="w3big" value="on" /> 本教程
<input type="checkbox" name="google" value="on" /> Google
<input type="submit" value="选择站点" />
</form>
</body>
</html>

ملف كود checkbox.py:

#!/usr/bin/python3

# 引入 CGI 处理模块 
import cgi, cgitb 

# 创建 FieldStorage的实例 
form = cgi.FieldStorage() 

# 接收字段数据
if form.getvalue('google'):
   google_flag = "是"
else:
   google_flag = "否"

if form.getvalue('w3big'):
   w3big_flag = "是"
else:
   w3big_flag = "否"

print ("Content-type:text/html")
print ()
print ("<html>")
print ("<head>")
print ("<meta charset=\"utf-8\">")
print ("<title>本教程 CGI 测试实例</title>")
print ("</head>")
print ("<body>")
print ("<h2> 本教程是否选择了 : %s</h2>" % w3big_flag)
print ("<h2> Google 是否选择了 : %s</h2>" % google_flag)
print ("</body>")
print ("</html>")

تعديل أذونات checkbox.py:

chmod 755 checkbox.py

متصفح الوصول المتحركة الرسوم البيانية العرض:

الراديو لنقل البيانات عن طريق برنامج CGI

راديو فقط نقل البيانات إلى ملقم، رمز HTML كما يلي:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/radiobutton.py" method="post" target="_blank">
<input type="radio" name="site" value="w3big" /> 本教程
<input type="radio" name="site" value="google" /> Google
<input type="submit" value="提交" />
</form>
</body>
</html>

رمز البرنامج النصي radiobutton.py على النحو التالي:

#!/usr/bin/python3

# 引入 CGI 处理模块 
import cgi, cgitb 

# 创建 FieldStorage的实例 
form = cgi.FieldStorage() 

# 接收字段数据
if form.getvalue('site'):
   site = form.getvalue('site')
else:
   site = "提交数据为空"

print ("Content-type:text/html")
print ()
print ("<html>")
print ("<head>")
print ("<meta charset=\"utf-8\">")
print ("<title>本教程 CGI 测试实例</title>")
print ("</head>")
print ("<body>")
print ("<h2> 选中的网站是 %s</h2>" % site)
print ("</body>")
print ("</html>")

تعديل أذونات radiobutton.py:

chmod 755 radiobutton.py

متصفح الوصول المتحركة الرسوم البيانية العرض:

نقل البيانات ناحية النص عبر برنامج CGI

تمريرة ناحية النص صفوف متعددة من البيانات إلى الخادم، رمز HTML كما يلي:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/textarea.py" method="post" target="_blank">
<textarea name="textcontent" cols="40" rows="4">
在这里输入内容...
</textarea>
<input type="submit" value="提交" />
</form>
</body>
</html>

textarea.py رمز البرنامج على النحو التالي:

#!/usr/bin/python3

# 引入 CGI 处理模块 
import cgi, cgitb 

# 创建 FieldStorage的实例 
form = cgi.FieldStorage() 

# 接收字段数据
if form.getvalue('textcontent'):
   text_content = form.getvalue('textcontent')
else:
   text_content = "没有内容"

print ("Content-type:text/html")
print ()
print ("<html>")
print ("<head>")
print ("<meta charset=\"utf-8\">")
print ("<title>本教程 CGI 测试实例</title>")
print ("</head>")
print ("<body>")
print ("<h2> 输入的内容是:%s</h2>" % text_content)
print ("</body>")
print ("</html>")

تعديل أذونات textarea.py:

chmod 755 textarea.py

متصفح الوصول المتحركة الرسوم البيانية العرض:

المنسدلة تمرير البيانات من خلال برنامج CGI.

HTML كود المربع المنسدل على النحو التالي:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/dropdown.py" method="post" target="_blank">
<select name="dropdown">
<option value="w3big" selected>本教程</option>
<option value="google">Google</option>
</select>
<input type="submit" value="提交"/>
</form>
</body>
</html>

رمز البرنامج النصي dropdown.py على النحو التالي:

#!/usr/bin/python3

# 引入 CGI 处理模块 
import cgi, cgitb 

# 创建 FieldStorage的实例 
form = cgi.FieldStorage() 

# 接收字段数据
if form.getvalue('dropdown'):
   dropdown_value = form.getvalue('dropdown')
else:
   dropdown_value = "没有内容"

print ("Content-type:text/html")
print ()
print ("<html>")
print ("<head>")
print ("<meta charset=\"utf-8\">")
print ("<title>本教程 CGI 测试实例</title>")
print ("</head>")
print ("<body>")
print ("<h2> 选中的选项是:%s</h2>" % dropdown_value)
print ("</body>")
print ("</html>")

تعديل أذونات dropdown.py:

chmod 755 dropdown.py

متصفح الوصول المتحركة الرسوم البيانية العرض:


يستخدم CGI كوكي

بروتوكول HTTP في العيب الكبير هو الخطأ الحكم على هوية المستخدم، والتي تعطي المبرمجين قدرا كبيرا من الإزعاج، ولكن يبدو ظيفة ملفات تعريف الارتباط يعوض عن هذا النقص.

كعك أن يتم الوصول إلى النصي في حين أن العملاء من خلال متصفح العميل على القرص الثابت العميل لكتابة سجلات البيانات واسترجاع البيانات عندما يزور العميل النصي المقبل، وذلك لتحقيق وظيفة تحديد الهوية، الكعكة التي يشيع استخدامها في التحقق من الهوية.

تركيب كوكي

يتم إرسال الكوكيز المتشعب من خلال رأس HTTP لتحقيق، كان عليه أن نقل الملفات، جملة رأس تعيين ملف تعريف الارتباط على النحو التالي:

Set-cookie:name=name;expires=date;path=path;domain=domain;secure 
  • اسم = اسم: لضبط قيمة ملف تعريف الارتباط (لا يمكن أن تستخدم اسم ""؛ و "،" رقم)، عندما تكون هناك قيم اسم متعددة "،" للفصل، على سبيل المثال: NAME1 = NAME1. NAME2 = NAME2 . NAME3 = NAME3.
  • تنتهي = التاريخ: كوكي تاريخ انتهاء الصلاحية في الشكل: تنتهي = "Wdy، DD- الاثنين-YYYY HH: MM: SS"
  • مسار = مسار: لتعيين مسار دعم الكوكي، إذا كان المسار هو مسار، ملفات تعريف الارتباط لكافة الملفات والدلائل من إدخال دليل حيز التنفيذ، على سبيل المثال: مسار = "/-CGI بن /"، إذا كان المسار ملف، كوكي ويشير إلى بدء نفاذ هذا الملف، على سبيل المثال: مسار = "/-CGI بن / cookie.cgi".
  • المجال = المجال: اسم المجال من الكعكة صالح، على سبيل المثال: مجال = "www.w3big.com"
  • تأمين: إذا تم إعطاء هذا العلم، أن الكعكة يمكن أن ينتقل إلا عن طريق الخادم بروتوكول https SSL.
  • استلام الكعكة من خلال إعداد متغيرات البيئة HTTP_COOKIE تحقيقه، برامج CGI يمكن الحصول على المعلومات عن طريق استرداد متغير الكعكة.

إعدادات ملفات تعريف الارتباط

هو بسيط جدا، سيتم إرسال إعدادات ملفات تعريف الارتباط الكوكيز بشكل منفصل في رأس HTTP. يقوم المثال التالي اسم وتنتهي في الكعكة:

#!/usr/bin/python3
# 
print ('Content-Type: text/html')
print ('Set-Cookie: name="本教程";expires=Wed, 28 Aug 2016 18:30:00 GMT')
print ()
print ("""
<html>
  <head>
    <meta charset="utf-8">
    <title>本教程(w3big.com)</title>
  </head>
    <body>
        <h1>Cookie set OK!</h1>
    </body>
</html>
""")

حفظ التعليمات البرمجية أعلاه لcookie_set.py، وتعديل أذونات cookie_set.py:

chmod 755 cookie_set.py

الأمثلة أعلاه استخدام رأس تعيين ملف تعريف الارتباط لتعيين معلومات كوكي، مجموعة خيارات كوكي غيرها من الصفات، مثل انتهاء الوقت ينتهي، المجال المجال مسار الطريق. يتم توفير هذه المعلومات: قبل أن "نوع المحتوى النص / أتش تي أم أل".


استرجاع معلومات كوكي

كوكي الصفحة استرجاع المعلومات بسيطة جدا، في CGI متغيرات البيئة HTTP_COOKIE، تنسيق تخزين كما يلي يتم تخزين المعلومات كوكي:

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

هنا هو برنامج CGI بسيطة لاسترداد معلومات ملف تعريف الارتباط:

#!/usr/bin/python3

# 导入模块
import os
import Cookie

print ("Content-type: text/html")
print ()

print ("""
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<h1>读取cookie信息</h1>
""")

if 'HTTP_COOKIE' in os.environ:
    cookie_string=os.environ.get('HTTP_COOKIE')
    c=Cookie.SimpleCookie()
    c.load(cookie_string)

    try:
        data=c['name'].value
        print ("cookie data: "+data+"<br>")
    except KeyError:
        print ("cookie 没有设置或者已过去<br>")
print ("""
</body>
</html>
""")

حفظ التعليمات البرمجية أعلاه لcookie_get.py، وتعديل أذونات cookie_get.py:

chmod 755 cookie_get.py

المزيد من إعدادات الألوان المتحركة الكعكة هي كما يلي:

أمثلة من تحميل الملف

ملف الإعدادات HTML لتحميل تحتاج إلى تعيين السمة enctype إلى MULTIPART /-بيانات النموذج، رمز على النحو التالي:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
 <form enctype="multipart/form-data" 
                     action="/cgi-bin/save_file.py" method="post">
   <p>选中文件: <input type="file" name="filename" /></p>
   <p><input type="submit" value="上传" /></p>
   </form>
</body>
</html>

كود save_file.py ملف نصي كما يلي:

#!/usr/bin/python3

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

form = cgi.FieldStorage()

# 获取文件名
fileitem = form['filename']

# 检测文件是否上传
if fileitem.filename:
   # 设置文件路径 
   fn = os.path.basename(fileitem.filename)
   open('/tmp/' + fn, 'wb').write(fileitem.file.read())

   message = '文件 "' + fn + '" 上传成功'
   
else:
   message = '文件没有上传'
   
print ("""\
Content-Type: text/html\n
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
   <p>%s</p>
</body>
</html>
""" % (message,))

حفظ التعليمات البرمجية أعلاه لsave_file.py، وتعديل أذونات save_file.py:

chmod 755 save_file.py

المزيد من إعدادات الألوان المتحركة الكعكة هي كما يلي:

إذا كنت تستخدم يونيكس / لينكس، ويجب استبدال الفاصل الملف في نافذة تحتاج فقط إلى استخدام بيان المفتوحة () يمكن أن يكون:

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

مربع الحوار تحميل ملف

ونحن إنشاء ملف foo.txt في الدليل الحالي لتحميل البرنامج.

تحميل الملف من خلال وضع معلومات رأس HTTP لتنفيذ رمز الدالة كما يلي:

#!/usr/bin/python3

# HTTP 头部
print ("Content-Disposition: attachment; filename=\"foo.txt\"")
print ()
# 打开文件
fo = open("foo.txt", "rb")

str = fo.read();
print (str)

# 关闭文件
fo.close()