Sebelumnya kita telah membuat web server dinamis menggunakan template engine dan handle method POST. Selanjutnya kita akan menambahkan query string ke dalam web server kita. Query string merupakan bagian berdasarkan URL setelah karakter tanda tanya (?) misalnya http://localhost:8080/login.html?user=admin , jadi user=admin adalah query string. kita langsung saja menambahkan ke web server kita, pertama yang kita lakukan menambahkan pada bagian handle request.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | def handle_request(request): request_message = str(request).split('\r\n') request_line = request_message[0] words = request_line.split() method = words[0] uri = words[1].strip("/") query = uri.split('?') query_string = '' http_version = words[2] if(uri == ''): uri = 'index.html' url = uri if(len(query) > 1): query_string = query[1] url = query[0] if(method == 'GET'): print(uri) query_string = query_string response = handle_get(url, http_version,query_string) elif(method == 'POST'): data = request_message[len(request_message)-1] response = handle_post(url, http_version,data,query_string) return response |
Pada handle_request kita membuat variabel query berfungsi menampung query_string , uri sendiri terdiri berdasarkan 2 hal yaitu url dan query string , setelah query string dipisahkan menggunakan url dengan kode berikut:
1 2 3 | if(len(query) > 1): query_string = query[1] url = query[0] |
Maka query string akan di kirimkan menjadi parameter , saat request terjadi maka query string akan di masukan ke dalam context dan di kirimkan menjadi data yang terlihat.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | response_line = b''.join([http_version.encode(), b'200', b'OK'])content_type = mimetypes.guess_type(url)[0] or 'text/html'entity_header = b''.join([b'Content-type: ', content_type.encode()])file = open(url, 'r')html = file.read()file.close()template = Template(html)_POST = {}_QUERY_STRING = {}for x in query_string.split('&'): y = x.split('=') _QUERY_STRING[y[0]]=y[1]for x in data.split('&'): y = x.split('=') _POST[y[0]]=y[1]print(_POST)context = { '_POST' : _POST, '_QUERY_STRING' : _QUERY_STRING,}message_body = template.render(context).encode() |

Komentar
Posting Komentar