Ինչպես ստանալ տվյալներ վեբ էջից՝ օգտագործելով GET և POST մեթոդները Python սկրիպտում Windows-ում


Python ծրագրերն ու սկրիպտները կարող են հարցումներ կատարել և ստանալ վեբ կայքերից և վեբ ծառայություններից՝ օգտագործելով GET և POST մեթոդները (ինչպես նաև այլ HTTP մեթոդներ՝ PUT, PATCH և DELETE):

Բայց ի՞նչ, եթե ցանկանում եք վեբ էջից տվյալներ փոխանցել Python սկրիպտին:

Դա կարելի է անել մի քանի ձևով.

Ինչպես ստանալ տվյալներ վեբ էջից՝ օգտագործելով GET և POST մեթոդները Python սկրիպտում, եթե Python-ը կազմաձևված է որպես Apache վեբ սերվերի CGI մոդուլ:

Տես նաև. Ինչպես տեղադրել Python-ը և PIP-ը Windows 10-ում: Ինչպես կարգավորել Python-ը որպես վեբ սերվերի մոդուլ

Վեբ սերվերի գրացուցակում ստեղծեք test-python ենթաթղթապանակ:

Դրանում մենք կստեղծենք HTML ֆայլ՝ test-form.htm անունով և հետևյալ բովանդակությամբ.

<!DOCTYPE html>
    <head>
        <title>ZaLinux.ru: An example of running Python on a web server</title>
    </head>
    <body>

        <form action="program.py" method="post">
            <label for="name">Name:</label>
            <input type="text" id="name" name="name"><br><br>

            <label for="email">Surname:</label>
            <input type="text" id="surname" name="surname"><br><br>

            <label for="message">Information:</label><br>
            <textarea id="info" name="info" rows="4" cols="30"></textarea><br><br>

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

    </body>
</html>

Նույն ենթաթղթապանակում ստեղծեք program.py ֆայլ հետևյալ բովանդակությամբ.

#!C:\python\python.exe

# Import modules for CGI processing
import cgi, cgitb

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

# Getting data from form fields
name = form.getvalue('name')
surname = form.getvalue('surname')
info = form.getvalue('info')

# HTTP header output
print ('Content-type: text/html\r\n\r\n')

# Output HTML code with received data
print ('<html>')
print ('<head>')
print ('<title>ZaLinux.ru: An example of running Python on a web server</title>')
print ('</head>')
print ('<body>')

print ('<em>Python script reports: </em>', '<br /><br />')
print ('<b>Name: </b>', name, '<br />')
print ('<b>Surname: </b>', surname, '<br />')
print ('<b>Extra information: </b>', info, '<br />')

print ('</body>')
print ('</html>')

Բացատրությունները տրված են կոդի մեկնաբանություններում։ Ձևաթղթից տվյալներ ստանալու համար օգտագործվում է form.getvalue():

Ուշադրություն դարձրեք առաջին տողին՝ «#!C:\python\python.exe» shebang-ով. python.exe ֆայլի ուղին կարող է տարբեր լինել ձեր դեպքում, ուստի խմբագրեք տողը, որպեսզի համապատասխանի ձեր Python-ի տեղադրմանը:

Բացեք http://localhost/test-python/test-form.htm հասցեն և լրացրեք ձևի տվյալները.

Եկեք տվյալները ուղարկենք սերվերին: Ինչպես տեսնում եք, Python սկրիպտը հաջողությամբ ստացել է POST մեթոդով վեբ սերվերին ուղարկված ձևի տվյալները։

Նմանատիպ ծածկագիր օգտագործվում է GET մեթոդով ուղարկված տվյալներ ստանալու համար. պարզապես փոխեք մեթոդը

տողում.

<!DOCTYPE html>
    <head>
        <title>ZaLinux.ru: An example of running Python on a web server</title>
    </head>
    <body>

        <form action="program.py" method="get">
            <label for="name">Name:</label>
            <input type="text" id="name" name="name"><br><br>

            <label for="email">Surname:</label>
            <input type="text" id="surname" name="surname"><br><br>

            <label for="message">Information:</label><br>
            <textarea id="info" name="info" rows="4" cols="30"></textarea><br><br>

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

    </body>
</html>

Խնդրում ենք նկատի ունենալ, որ Python սկրիպտները վեբ սերվերի CGI մոդուլի հետ օգտագործելու համար պետք է բարելավվեն. նախքան տվյալները ցուցադրելը սկրիպտը պետք է ուղարկի HTTP վերնագիր: Եթե չփոխեք Python-ի սկրիպտը, ապա ծրագիրը կձախողվի: