2015-07-16 3 views
0

Я использую python флягу, а также html, чтобы создать небольшой веб-сайт (так же, как хобби, когда я покинул школу), я создал форму в html и сохранил ее в папке шаблонов проекта. Затем я добавил функцию в скрипт python, поэтому, когда нажата кнопка на веб-странице, она перенаправляет пользователя на главную страницу (index.html), однако, когда я проверил веб-страницу и нажал кнопку на веб-страницы (при работающем колба сервера) на странице "400" плохой запрос показанFlask не активирует функцию

Python код:

#Python code behind the website 
import datetime 
from flask import Flask, session, redirect, url_for, escape, request, render_template 
print ("started") 
def Log(prefix, LogMessage): 
    timeOfLog = datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S" + " : ") 
    logFile = open("Log.log", 'a') 
    logFile.write("[" + timeOfLog + "][" + prefix + "][" + LogMessage + "] \n") 
    logFile.close() 

app = Flask(__name__) 

@app.route('/') 
def my_form(): 
    print ("Acessed index") 
    return render_template("index.html") 

@app.route('/', methods=['POST']) 
def my_form_post(): 
    text = request.form['text']#requests text from the text form 
    processed_text = text #does nothing 
    user = "" #use poss in future to determin user 
    logFile = open("MessageLog.msglog", 'a')#opens the message log file in append mode 
    logFile.write(text + "\n")#stores the inputted message in the message log file 
    logFile.close() 
    #print (text) 
    Log("User Message", (user + text))#uses the main log file to store messages aswell as errors 
    print ("Accessing index") 
    return render_template("test.html") 

@app.route('/test', methods=['POST']) 
def test(): 
    #text = request.form['text'] 
    print ("Test page function") 
    #return "hello" 
    return render_template("index.html") 

if __name__ == '__main__': 
    app.debug = True 
    app.run(host='0.0.0.0') 

HTML код: ->

<body> 
<h1>Test Page</h1> 
<form method="POST"> 
    <input type="submit" name="my-form" value="Send"> 
</form> 

</body> 

Stack Трек: stack trace

+0

вы используете 'app.run (отладочный = True)' – IanAuld

+0

Да, веб-страница все еще возвращается как «400 Bad Request» независимо от того, какой отладчик состояния находится в –

+0

Можете ли вы опубликовать трассировку стека? – IanAuld

ответ

1

Вы должны опубликовать форму правильного URL:

<body> 
<h1>Test Page</h1> 
<form method="POST" action='/test'> 
    <input type="submit" name="my-form" value="Send"> 
</form> 
</body> 

По умолчанию, если вы не добавить атрибут action к HTML форме это будет просто выполнить это определено метод к URL-адресу, в котором вы сейчас находитесь. Вы можете добавить атрибут action, чтобы изменить это поведение.

Вы также можете сделать это с помощью функции url_for(). Это немного безопаснее, поскольку URL, как правило, меняются чаще, чем ваши имена методов зрения:

<body> 
<h1>Test Page</h1> 
<form method="POST" action="{{ url_for('test') }}"> 
    <input type="submit" name="my-form" value="Send"> 
</form> 
</body> 

Вы передаете имя метода просмотра (не это URL) в виде строки функции. Будьте осторожны, чтобы использовать правильные кавычки.

Обратите внимание, что это несколько запутывает, чтобы иметь 2 вида для одного и того же URL. Обычно что-то вроде это делается хотя YMMV, но рассмотреть его для применения:

@app.route('/someurl') 
def some_view(): 
    if request.method == "POST": 
     # handle POST 
    else: 
     # handle GET 
+0

Спасибо, я вам обязан! –

Смежные вопросы