Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 13, 2016 20:07:13

ivladden
Зарегистрирован: 2016-02-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Клиент-серверное приложение

Приветствую форумчан!)
Учусь по методичке с ВУЗа осваивать python.
Написал небольшое клиент-серверное приложение (клиент-серверное это преувеличено)
В роли клиента у меня выступает html страница. А в качестве серверного приложения python файл.
Установил себе WAMp (windows apache mysql php). Настроил httpd.conf что бы поддерживал файлы .py .
Проверил Hello word.py - работает. Многие программы запускал - работают. А эта чего то выеживается и выдает 500 ошибку. Пути все указаны верно (и в конфиге и к файлу python.exe)
Вроде все правильно указал (на мое мнение). Может кто-то из мудрецов тыкнет меня в ошибку. Ну или поможет строчку как-то исправить ..)

<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
        <title>test</title>
        <script src="jquery.min.js"></script>
        <script>
            $(function()
            {
                $('#clickme').click(function(){
                    var name = prompt("Write your name!");
                    current = this;
                    $.ajax({
                        url: "http://localhost/1/lb5.py",
                        type: "post",
                        datatype:"application/json",
                        data: JSON.stringify({'key':'1','ФИО':name}),
                        success: function(response){
                            var testOne = response.test1;
                            var testTwo = response.test2;
                            var testThree = response.test3;
                            var answerO = "<br><input type='text' size='20' id='an1'>";
                            var answerT = "<br><input type='text' size='20' id='an2'>";
                            var answerTh = "<br><input type='text' size='20' id='an3'>";
                            var butt = "<br><button id='chek'>проверить</button>";
                            $("#testOne").html(testOne+answerO);
                            $("#testTwo").html(testTwo+answerT);
                            $("#testThree").html(testThree+answerTh);
                            $("#buttonST").hide();
                            $("#buttonP").html(butt);
                        }
                    });
                    console.log(testOne);
                    console.log(testTwo);
                    console.log(testThree);
                        $("#buttonP").on( "click", function() {
                            var an1 = $("#an1").val();
                            var an2 = $("#an2").val();
                            var an3 = $("#an3").val();
                            console.log(an1);
                            console.log(an2);
                            console.log(an3);
                                $.ajax({
                                    url: "http://localhost/1/lb5.py",
                                    type: "post",
                                    datatype:"application/json",
                                    data: JSON.stringify({'key':'2','an1':an1,'an2':an2,'an3':an3}),
                                    success: function(response){
									alert ("error");
                                        var user = "<p><b>User:</b> "+name+"<br>";
                                        var rez = "<b>Rezult:</b> ["+response.rez+"]</p>";
                            
                                        $("#testOne").html(user+rez);
                                        $("#testTwo").html("");
                                        $("#testThree").html("");
                                        $("#buttonP").html(""); 
                                        $("#buttonST").show();                                 
                                    }
                                });
                        });
                });
            });
        </script>
    </head>
    <body>
        <div id="placeHolder">
            <div id="testOne"></div>
            <div id="testTwo"></div>
            <div id="testThree"></div>
            <div id="buttonP"></div>
            <div id="buttonST">
            <button id="clickme"> Старт</button>
            </div>
        </div>
    </body>
</html>
Файл jquery.min.js у меня скачан и лежит в той же папке где и html.

#!C:/Python34/python.exe
import cgi
import sys
import json
myjson = json.load(sys.stdin)
sys.stdout.write("Content-Type: application/json")
sys.stdout.write("\n")
sys.stdout.write("\n")
keyNum = int(myjson['key'])
if keyNum == 1:
	f = open("rezult.txt",'a+')
	nameLs = []
	nameLs.append(myjson['name'])
	f.writelines(nameLs)
	f.close()
	test = {}
	test['test1'] = "<p><h2>Вопрос №1</h2></p><p>Произвольное количество именованных аргументов в python обозначается:</p><p>1. **. 2. *. 3. ... .</p>"
	test['test2'] = "<p><h2>Вопрос №2</h2></p><p>Передавать в функцию параметр можно:</p><p>1. Только по ссылке. 2. Только по значению. 3. По ссылке и по значению</p>"
	test['test3'] = "<p><h2>Вопрос №3</h2></p><p>Самая медленная сортировка:?</p><p>1. Пузырьковая. 2. Двоичная. 3. Быстрая</p>"
	sys.stdout.write(json.dumps(test))
	sys.stdout.write("\n")
	sys.stdout.close()
if keyNum == 2:
	colbal = 0
	if int(myjson['an1']) == 1:
			colbal = colbal + 1
	if int(myjson['an2']) == 3:
			colbal = colbal + 1
	if int(myjson['an3']) == 1:
			colbal = colbal + 1
	
	rezult = {}
	rezult['rez'] = colbal
	sys.stdout.write(json.dumps(rezult))
	sys.stdout.write("\n")
	sys.stdout.close()
	f = open("rezult.txt",'a+')
	nameLs2 = []
	strSS2 = " -> Rezult:"+str(colbal)+"\n"
	nameLs2.append(strSS2)
	f.writelines(nameLs2)
	f.close()
	del nameLs2
	
else:
	nameLs = []
	strSS = "\n"
	nameLs.append(strSS)
	f.writelines(nameLs)
	f.close()
	sys.stdout.write("\n")
	sys.stdout.close()

Офлайн

#2 Фев. 14, 2016 00:23:35

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Клиент-серверное приложение

А это что?
"http://localhost/1/lb5.py"

Офлайн

#3 Фев. 14, 2016 09:42:31

ivladden
Зарегистрирован: 2016-02-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Клиент-серверное приложение

Firik
А это что?"http://localhost/1/lb5.py"
Директория где лежим lb5.py (файл питона)

Офлайн

#4 Фев. 14, 2016 10:23:17

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Клиент-серверное приложение

Если есть ошибка, значит где-то должен быть трейсбек этой ошибки, в логах апача, например.
Отладка программ порой занимает больше времени программиста, чем собственно написание этой программы. Вам надо учиться дебажить программы, самый простой, но не самый лучший способ - напихать в код принтов, тогда вы будете хотя бы видеть какая часть программы точно выполняется, а до какого момента программа не доходит. Следующим шагом вам надо научиться работать с инструментами разработки, в любой уважающей себя ИДЕ есть встроенный дебаггер, с помощью которого вы можете расставить точки останова или следить за состоянием переменных или выполнять программу по шагам. Да и вообще сама идея запускать скрипт сразу на апаче безблагодатна, есть множество веб-серверов предназначенных именно для разработки и отладки, например Werkzeug, что может быть надежней, чем получить трейсбек непосредственно в окно эмулятора терминала? Ну и не надо забывать, что веб-серверы сами сохраняют историю выполнения скриптов в лог-файлах. Поковырявшись в логах вы скорее всего найдете конкретное указание, в какой строке произошла ошибка и что это за ошибка.
Ну а так никто не будет за вас гадать, что же у вас не так в коде, просто так не ловят ошибки.



Отредактировано FishHook (Фев. 14, 2016 10:29:53)

Офлайн

#5 Фев. 14, 2016 10:28:57

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Клиент-серверное приложение

Вот, например, дебаггер в Пайшарме



Офлайн

#6 Фев. 14, 2016 13:41:27

ivladden
Зарегистрирован: 2016-02-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Клиент-серверное приложение

Я вчера только узнал о этих божественных логах.
Pycharm'ом пользуюсь. На мое мнение самая лучшая IDE на Windows для Python'а.
Ругается в логах вот на эту строчку
myjson = json.load(sys.stdin)

Как я понял это кодировка json'а который я ему передаю.
Как сделать это верно пока не понимаю.
Попытался заменить эту строчку вот этими:

result = {'success':'true','message':'The Command Completed Successfully'};
myjson = json.load(sys.stdin)
print ('Content-Type: application/json\n\n')
myjson.dump(result, sys.stdout)
но увы.

Офлайн

#7 Фев. 14, 2016 14:36:29

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Клиент-серверное приложение

ivladden
Дорогой друг, вы до сих пор не показали вывод ошибки.
Интерпретатор на чем то спотыкается, и он об этом буквально орёт в логи.
Так покажите нам, о чем он орёт.
Ошибка в питоне выглядит вот так


здесь есть номер строки, в которой произошла ошибка, есть класс исключения, есть детализация этого исключения. В вашей программе случается какая-то такая же ошибка, вашу программу выполняет такой-же интерпретатор, покажите же нам ошибку.



Отредактировано FishHook (Фев. 14, 2016 14:38:31)

Офлайн

#8 Фев. 14, 2016 19:00:48

ivladden
Зарегистрирован: 2016-02-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Клиент-серверное приложение

В том то и дело что ошибки нету.
Запускаю я файл питона своего.
И вот так он висит.


Нажимаю на стоп выдает ошибка -1
Вот лог

End of script output before headers: first.py
AH01215: Traceback (most recent call last):\r
AH01215: File “C: /wamp/www/py/first.py”, line 6, in <module>\r
AH01215: myjson = json.load(sys.stdin)\r
AH01215:
File “C: \\Python34\\lib\\json\\__init__.py”, line 268, in load\r
AH01215: parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)\r
AH01215: File “C:\\Python34\\lib\\json\\__init__.py”, line 318, in loads\r
AH01215: return _default_decoder.decode(s)\r
AH01215: File “C:\\Python34\\lib\\json\\decoder.py”, line 343, in decode\r
AH01215: obj, end = self.raw_decode(s, idx=_w(s, 0).end())\r
AH01215: File “C:\\Python34\\lib\\json\\decoder.py”, line 361, in raw_decode\r
AH01215: raise ValueError(errmsg(“Expecting value”, s, err.value)) from None\r
AH01215: ValueError: Expecting value: line 1 column 1 (char 0)\r

Как я понял ошибка у меня именно в 6й строке:
myjson = json.load(sys.stdin)

Попытался отдебажить
Выдало вот такое вот

C:\Users\Vladden\AppData\Local\Programs\Python\Python35-32\python.exe “C:\Program Files (x86)\JetBrains\PyCharm Community Edition 5.0.4\helpers\pydev\pydevd.py” –multiproc –qt-support –client 127.0.0.1 –port 63908 –file Cwamp/www/py/first.py
pydev debugger: process 6312 is connecting

Connected to pydev debugger (build 143.1919)

Увидел порт
127.0.0.1 –port 63908
перехожу и вижу

Отредактировано ivladden (Фев. 14, 2016 19:11:24)

Прикреплённый файлы:
attachment 2016-02-14_18-56-26.jpg (143,2 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version