Найти - Пользователи
Полная версия: Почему ошибка 404?
Начало » Python для новичков » Почему ошибка 404?
1
QWgtyhdk
Всем привет!
Почитал здесь-http://python.su/forum/topic/14219/
всё сделал так как там описано,также всё назвал

потом решил сам попробовать написать.
Написал скрипт:

#!/usr/bin/env python 
#-*-coding: utf-8 
import os,cx_Oracle,pymssql 
import flask 
import unittest 
import tempfile
#Импортируем класс Flask
from flask import Flask
from flask import render_template
DEBAG=True
#Создаём экземпляр app класса Flask. Экземлаяр в данном случае уже является WSGI #приложением
app = Flask(__name__)
#это блок куда записывать функции
@app.route('/index.html', methods=['GET'])
def funOracle():
    connection = cx_Oracle.connect("user","pwd","ip_adrr/name1BD")
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM table where pole=znachenie")
    date=cursor.fetchall()
    p=''
    for rec in date:
       p=p+str(rec)
    connection.close()
    p.decode('string_escape')
    return render_template('index.html',keyone=str(p))
def funMSSQL():
    conn = pymssql.connect( user = 'user', password = 'pwd', host = 'namehost', database = 'name2BD')
    cur=conn.cursor()
    cur.execute('SELECT * FROM table10')
    data=cur.fetchall()
    s=''
    for rec in data:
       s=s+str(rec)
    conn.close()
    return render_template('index.html',keytwo=s)
#этот блок запускает на исполнение наше WSGI приложение, причём так,чтобы клиенты ЛВС #запустить это приложение тоже.
if __name__ == '__main__':
    app.run(debug=True, host='127.0.0.1')

шаблон такой:

<!doctype html>
<title> Стартовая страница </title>
{% extends "index.html" %}
{% block body %}
{% if keyone %}
<th>{{keyone}}</th>
{%  else %}
<th>Не передан шаблону параметр keyone</th>
{%  endif %}
{% if keytwo %}
<th>{{keytwo}}</th>
{%  else %}
<th>Не передан шаблону параметр keytwo</th>
{%  endif %}

запустил скрипт:
[root@ser py]# python hello.py
 * Running on http://0.0.0.0:5000/
 * Restarting with reloader...
127.0.0.1 - - [12/Apr/2012 10:30:20] "GET /index.html HTTP/1.0" 404 -

Ошибки не было как в вышеуказанном примере, а вот 404 ошибка выскочила((что не так в HTTP-коде?вроде же всё прозрачно?или я как-то не так описываю шаблон?
Yanzay
Во-первых, такое впечатление, что вы забыли сохранить файл перед запуском, потому как у вас в коде:
app.run(debug=True, host='127.0.0.1')
а в консоли вывод:
* Running on http://0.0.0.0:5000/

Во-вторых у вас две функции должны быть доступны по двум разным адресам, поэтому надо написать как-то так:
...
@app.route('/oracle', methods=['GET'])
def funOracle():
...
@app.route('/mssql', methods=['GET'])
def funMSSQL():
...
QWgtyhdk
С учётом вышесказанного , я переделал содержание скрипта сл.образом:

#!/usr/bin/env python 
#-*-coding: utf-8 
import os,cx_Oracle,pymssql 
import flask 
import unittest 
import tempfile
#Импортируем класс Flask
from flask import Flask
from flask import render_template
DEBAG=True
#Создаём экземпляр app класса Flask. Экземлаяр в данном случае уже является WSGI #приложением
app = Flask(__name__)
#это блок куда записывать функции
@app.route('/oracle', methods=['GET'])
def funOracle():
    connection = cx_Oracle.connect("user","pwd","ip_adrr/name1BD")
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM table where pole=znachenie")
    date=cursor.fetchall()
    p=''
    for rec in date:
       p=p+str(rec)
    connection.close()
    p.decode('string_escape')
    return render_template('index.html',keyone=str(p))
@app.route('/mssql', methods=['GET'])
def funMSSQL():
    conn = pymssql.connect( user = 'user', password = 'pwd', host = 'namehost', database = 'name2BD')
    cur=conn.cursor()
    cur.execute('SELECT * FROM table10')
    data=cur.fetchall()
    s=''
    for rec in data:
       s=s+str(rec)
    conn.close()
    return render_template('index.html',keytwo=s)
#этот блок запускает на исполнение наше WSGI приложение, причём так,чтобы можно было работать только с локали
if __name__ == '__main__':
    app.run(debug=True, host='127.0.0.1')

данный скрипт(hello.py) я так же поместил в /var/www/html/py
wsgi настраивал так же как описано в http://python.su/forum/topic/14219/
также устанавливал flask

шаблон(index.html) храниться в /var/www/html/py/templates
<!doctype html>
<title> Стартовая страница </title>
{% extends "index.html" %}
{% block body %}
{% if keyone %}
<th>{{keyone}}</th>
{%  else %}
<th>Не передан шаблону параметр keyone</th>
{%  endif %}
{% if keytwo %}
<th>{{keytwo}}</th>
{%  else %}
<th>Не передан шаблону параметр keytwo</th>
{%  endif %}

запустил апач

запустил скрипт:

[root@ser py]# python hello.py
 * Running on http://127.0.0.1:5000/
 * Restarting with reloader...
127.0.0.1 - - [13/Apr/2012 06:30:20] "GET /index.html HTTP/1.0" 404 -

коннект к БД нормальный-возращает что нужно,если функции запускать в консоле отдельно.
я что-то не могу понять,где ошибка в шаблоне?я так понимаю такая же ошибка возникает,если есть ошибка в http-коде же?скрит же верно описан…или что-то я упустил?


Yanzay
QWgtyhdk
я что-то не могу понять,где ошибка в шаблоне
ошибка не в шаблоне =)
Вы в браузере что пишете? Судя по всему http://127.0.0.1:5000/index.html, а вы же только что поменяли адреса роутинга =) (подсказка: надо заходить на http://127.0.0.1:5000/oracle и http://127.0.0.1:5000/mssql)
Рекомендую вам ознакомиться с документацией по Flask хотя-бы на начальном уровне
QWgtyhdk
Yanzay
QWgtyhdk
я что-то не могу понять,где ошибка в шаблоне
ошибка не в шаблоне
Вы в браузере что пишете? Судя по всему http://127.0.0.1:5000/index.html, а вы же только что поменяли адреса роутинга (подсказка: надо заходить на http://127.0.0.1:5000/oracle и http://127.0.0.1:5000/mssql)
Рекомендую вам ознакомиться с документацией по Flask хотя-бы на начальном уровне
хм…а как же в таком случае работать с функциями по работе с Oracle и MS SQL ,чтобы результаты были в обдной веб-странице?
QWgtyhdk
Yanzay
QWgtyhdk
я что-то не могу понять,где ошибка в шаблоне
ошибка не в шаблоне
Вы в браузере что пишете? Судя по всему http://127.0.0.1:5000/index.html, а вы же только что поменяли адреса роутинга (подсказка: надо заходить на http://127.0.0.1:5000/oracle и http://127.0.0.1:5000/mssql)
Рекомендую вам ознакомиться с документацией по Flask хотя-бы на начальном уровне

Попробовал зайти на http://127.0.0.1:5000/oracle и http://127.0.0.1:5000/mssql мне выдало в браузере

по обращению на http://127.0.0.1:5000/oracle выдало:
...
TemplateSyntaxError:Unexpected end of templete. Jinja was looking for the following tags:'endif'. The innermost block that need to be closed is 'if'

по обращению на http://127.0.0.1:5000/mssql

…вообщем там на учётку ругается-мол устарел пароль
Yanzay
Смотрите что у меня получилось:
#!/usr/bin/env python 
#-*-coding: utf-8 
import os,cx_Oracle,pymssql 
import flask 
import unittest 
import tempfile
from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route('/', methods=['GET'])
def MainHandler():
    keyone = funOracle()
    keytwo = funMSSQL()
    return render_template('index.html', keyone=keyone, keytwo=keytwo)
def funOracle():
    connection = cx_Oracle.connect("user","pwd","ip_adrr/name1BD")
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM table where pole=znachenie")
    date=cursor.fetchall()
    p=''
    for rec in date:
       p=p+str(rec)
    connection.close()
    p.decode('string_escape')
    return p
def funMSSQL():
    conn = pymssql.connect( user = 'user', password = 'pwd', host = 'namehost', database = 'name2BD')
    cur=conn.cursor()
    cur.execute('SELECT * FROM table10')
    data=cur.fetchall()
    s=''
    for rec in data:
       s=s+str(rec)
    conn.close()
    return s
if __name__ == '__main__':
    app.run(debug=True, host='127.0.0.1')
Шаблон (немного переделал ваш, но это все равно не то что вам нужно, но для теста пойдет):
<!doctype html>
<head>
<title> Стартовая страница </title>
</head>
<body>
{% if keyone %}
<th>{{keyone}}</th>
{% else %}
<th>Не передан шаблону параметр keyone</th>
{% endif %}
{% if keytwo %}
<th>{{keytwo}}</th>
{% else %}
<th>Не передан шаблону параметр keytwo</th>
{% endif %}
</body>
Запускаете, в браузер вводите http://127.0.0.1:5000/ смотрите что получилось и идете дальше разбираться с документацией.
QWgtyhdk
Скрипт переделал,в шаблоне поправил-добпавил пробелы между знакам {{ и }}
и всё заработал)))

но не отображаются русские сиволы((
по работе с Oracle-они заменены символом ?
а по работе с MS SQL-перед символом стоит буква u

даже просто в шаблоне пытаешься написать на рус яз, что выводить-сразу в браузере ошибка выскакивает- UnicodeDecodeError

У меня вопрос ещё, а как создать 3 кнопки допустим на веб-странице, чтобы по нажатию 1-ой кнопки-выполнялась функция длпусти назовём её funBuy(), которая дополнит страницу снизу словом-Вы купили!Поздравляем Вас!
А вторая кнопка-назовём её funProd()-добавит снизу страницы-Позравляю!Вы продали!
3-яя кнопка на странице-по нажатию которой открывается ещё одна вкладка в браузере и перенапраляется на php-шный скрипт(например он называется по другому адресу в локалке-mainofic.php)…т.е. своеобразный rejirect сделать нужно.
fata1ex
Вот странно. С одной стороны, помогать хорошо. С другой - это настолько некоторых расхолаживает, что они перестают делать что-либо самостоятельно и со всеми проблемами идут за помощью.

QWgtyhdk, в интернете полно справочного материала. Изучайте, пробуйте.
QWgtyhdk
Вы не думайте,что я сугубо форумом пользуюсь-это я тоже считаю не правильным. по вопросу ошибки UnicodeDecodeError я может и догадываюсь в чём проблема-вот собсвенно сейчас литеритуру и читаю в том числе по этому поводу-считаю,что всё дело по особенностями птона обрабатывать utf8 “по-своему”…
а вот с кнопками-тут я пока затрудняюсь сам найти ответ-хотя литературу читаю.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB