Setelah kita membuat webserver dinamis dengan template engine dan handle method POST lalu kita akan melanjutkan dengan menambahkan query string ke dalam webserver kita. Query string adalah bagian dari URL setelah karakter tanda tanya (?) contohnya link berikut ini http://localhost:8080/login.html?user=admin, jadi user=admin ini merupakan query string. Kita langsung saja menambahkan ke webserver kita, yang pertama yang kita lakukan adalah menambahkan di bagian handle request seperti kode berikut :
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 |
Di bagian handle_request kita membuat variabel query untuk menampung query_string, uri terdiri dari dua hal yaitu url dan query string, setelah query string dipisahkan dengan url dengan kode berikut :
1 2 3 | if ( len (query) > 1 ): query_string = query[ 1 ] url = query[ 0 ] |
Maka query string akan di kirimkan sebagai parameter, ketika request terjadi maka query string akan di masukan ke dalam context dan di kirimikan sebagai 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