Ошибка Python localhost в mac os sierra
Я использую google maps, который имеет базовую форму для заполнения пользователем своих данных. При нажатии кнопки отправить данные формы должны быть сохранены в таблице MySQL, которую я создал.
Я использую apache, который уже предустановлен на моем mac. Я скачал MySQL, и он работает нормально. Я создал таблицу с необходимыми столбцами в ней. Я использую PyCharm Community Edition для запуска моих скриптов python.
Мой map.html файл (тот, в котором есть карта google с формой) отлично работает на локальном хосте. Однако при нажатии кнопки Отправить я получаю следующую ошибку : не найден запрошенный URL-адрес /Library/WebServer/CGI-Executables/processing.py не был найден на этом сервере.
Мой map.html файл находится в библиотеке/веб-сервере/документах/
Мой processing.py файл (скрипт python, который используется для обработки данных формы и вставки в таблицу MySQL) находится в библиотеке / WebServer/CGI-Executables/
Я не внес никаких изменений в свой файл httpd.conf, кроме добавления файла .py в оператор AddHandler.
Я прилагаю все свои файлы ниже.
Пожалуйста, помогите мне с этим, так как я застрял на этом уже очень давно. Обратите внимание, что я использую Mac OS Sierra.
Заранее спасибо.
Что я уже пробовал:
#map.html файл
<!DOCTYPE html> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta charset="utf-8" /> <title>MAPS #map { width: 100%; height: 100%; } html, body { height: 100%; margin: 0; padding: 0; } #description { font-family: Calibri; font-size: 15px; font-weight: 300; } #infowindow-content .title { display: none; } #map #infowindow-content { display: none; } .pac-card { margin: 10px 10px 0 0; border-radius: 2px 0 0 2px; box-sizing: border-box; -moz-box-sizing: border-box; outline: none; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); background-color: #fff; font-family: Calibri; } #pac-container { padding-bottom: 12px; margin-right: 12px; } .pac-controls { display: inline-block; padding: 5px 11px; } .pac-controls label { font-family: Calibri; font-size: 16px; font-weight: 400; } #pac-input { background-color: #fff; font-family: Calibri; font-size: 15px; font-weight: 400; margin-left: 12px; padding: 8px 12px; text-overflow: ellipsis; width: 400px; border: 1px solid #ccc; } #pac-input:focus { border-color: #4d90fe; } #title { color: #fff; background-color: #4d90fe; font-size: 25px; font-weight: 400; padding: 6px 12px; } #target { width: 345px; } #form { display: none; } #heading { text-align: center; color: #003366; font-size: 30px; font-family: Calibri; padding: 8px 12px; } label.field { text-align: left; font-weight: bolder; font-size: 16px; font-family: Calibri; } input[type=text], input[type=email], input[type=number], select { font-family: Calibri; font-size: 16px; font-weight: bolder; padding: 8px 12px; width: 100%; margin: 8px 0; display: inline-block; border: 1px solid black; border-radius: 4px; box-sizing: border-box; } input[type=submit] { font-family: Calibri; font-size: 16px; font-weight: bolder; background-color: white; color: #00b300; padding: 8px 12px; margin: 8px 0; border: 2px solid #00b300; border-radius: 4px; cursor: pointer; box-sizing: border-box; } input[type=submit]:hover { background-color: #00b300; color: white; } input[type=reset] { font-family: Calibri; font-size: 16px; font-weight: bolder; background-color: white; color: #cc0000; padding: 8px 12px; margin: 8px 0; border: 2px solid #cc0000; border-radius: 4px; cursor: pointer; box-sizing: border-box; } input[type=reset]:hover { background-color: #cc0000; color: white; } input[type=text]:focus { background-color: #f2f2f2; border-color: #4d90fe; } input[type=email]:focus { background-color: #f2f2f2; border-color: #4d90fe; } input[type=number]:focus { background-color: #f2f2f2; border-color: #4d90fe; } select:focus { background-color: #f2f2f2; border-color: #4d90fe; } <div id="map"></div> <div id="form"> <p id="heading">PERSONAL INFORMATION</p> Full Name: <br> <br> E-mail: <br> <br> Mobile: <br> <br> Gender: Male Female Other <br> <br> Area of Expertise: <br> <br> Years of Experience: <br> <br> <p style="text-align: center"> </p> </div> var map; var iconBase; var input; var searchBox; var markers=[]; var markerArray =[]; var infowindow; function initAutocomplete() { map = new google.maps.Map(document.getElementById('map'), { center: {lat: 20.5937, lng: 78.9629}, zoom: 5, mapTypeId: 'roadmap', gestureHandling: 'cooperative' }); //Declaring infowindow. infowindow = new google.maps.InfoWindow({ content: document.getElementById('form') }); // Create the search box and link it to the UI element. input = document.getElementById('pac-input'); searchBox = new google.maps.places.SearchBox(input); map.controls[google.maps.ControlPosition.TOP_LEFT].push(input); // Bias the SearchBox results towards current map's viewport. map.addListener('bounds_changed', function() { searchBox.setBounds(map.getBounds()); }); //Creates a marker when the user clicks on a location on the map. google.maps.event.addListener(map, 'click', function(event) { addMarker(event.latLng, map); }); // Listen for the event fired when the user selects a prediction and retrieve // more details for that place. searchBox.addListener('places_changed', function() { var places = searchBox.getPlaces(); if (places.length == 0) { return; } // Clear out the old markers. markers.forEach(function(marker) { marker.setMap(null); }); // For each place, get the icon, name and location. var bounds = new google.maps.LatLngBounds(); places.forEach(function(place) { if (!place.geometry) { console.log("Returned place contains no geometry"); return; } var icon = { url: place.icon, size: new google.maps.Size(71, 71), origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(17, 34), scaledSize: new google.maps.Size(25, 25) }; // Create a marker for each place. markers.push(new google.maps.Marker({ map: map, icon: icon, title: place.name, position: place.geometry.location })); if (place.geometry.viewport) { // Only geocodes have viewport. bounds.union(place.geometry.viewport); } else { bounds.extend(place.geometry.location); } }); map.fitBounds(bounds); }); } //Marker function declaration. function addMarker(location, map) { // Add the marker at the clicked location. var iconBase = 'https://maps.google.com/mapfiles/kml/paddle/'; marker = new google.maps.Marker({ draggable: true, animation: google.maps.Animation.DROP, position: location, map: map, icon: iconBase + 'ylw-blank.png' }); //Infowindow pops up on clicking the marker. google.maps.event.addListener(marker, 'click', function() { document.getElementById('form').style.display='inline-block'; infowindow.open(map, marker); }); }
#processing.py файл (написан этот код в PyCharm Community Edition)
import MySQLdb import cgi import cgitb cgitb.enable() form = cgi.FieldStorage() fullname = form.getvalue('fullname', '') emailid = form.getvalue('emailid', '') mobile = form.getvalue('mobile', '') gender = form.getvalue('gender', '') areaofexpertise = form.getvalue('areaofexpertise', '') yearsofexperience = form.getvalue('yearsofexperience', '') db = MySQLdb.connect(host="localhost", user="root", passwd="*****", db="client_database") cursor = db.cursor() query = """INSERT INTO client_info (FULL_NAME, EMAIL_ID, MOBILE, GENDER, AREA_OF_EXPERTISE, YEARS_OF_EXPERIENCE) VALUES (%s, %s, %s, %s, %s, %s)""" cursor.execute(query, (fullname, emailid, mobile, gender, areaofexpertise, yearsofexperience)) result = cursor.fetchall() db.commit() db.close()