2017-10-02 4 views
-1

Je suis nouveau au développement de flacon et de Web, je suis un tutoriel et j'obtiens l'erreur interne de serveur. je reçois l'erreur lors de la tentative d'accès @app.route('question/<title>') en entrant l'URL "/ question/title"Erreur de serveur interne de flacon

code:

from flask import flash, url_for, request, render_template 
from app import app 
import redis 

#connect to redis data store 
r = redis.StrictRedis(host='localhost', port=6379, db=0, charset='utf-8', decode_responses= True) 

#alternate ways to connect to redis, each command is equivalent 
#r = redis.StrictRedis() 
#r = redis.StrictRedis('localhost', 6379, 0) 

# server/ 
@app.route('/') 
def hello(): 
    #ceating a link to the second page 
    create_page = url_for('create') 
    return '<a href="' + create_page + '">Creat Question</a>' 

# server/create 
@app.route('/create', methods =['GET', 'POST']) 
def create(): 
    if request.method == 'GET': 
     # send to user the form 
     return render_template('CreateQuestion.html') 
    elif request.method == 'POST': 
     #read the data and save it 
     title = request.form['title'] 
     answer = request.form['answer'] 
     question = request.form['question'] 

     #store data in data store 
     r.set(title + ':question', question) 
     r.set(title + ':answer', answer) 

     return render_template('CreatedQuestion.html', question = question) 
    else: 
     return "<h2>Invalid request</h2>" 


@app.route('/question/<title>', methods = ['GET', 'POST']) 
def question(title): 
    if request.method == 'GET': 
     # send the user the form 
     question = r.get(title + ':question') 
     return render_template('AnswerQuestion.html', question = question) 
    elif requset.method == 'POST': 
     # user has attempt answer. cheak if they're correct 
     submittedAnswer = request.form['submittedAnswer'] 

     answer = r.get(title + ':answer') 

     if submittedAnswer == answer: 
      return render_template('Correct.html') 

     else: 
      return render_template('Incorrect.html', submittedAnswer = submittedAnswer, answer = answer) 

    else: 
     return '<h2>Invalid request</h2>' 

je reçois la title d'ici:

<!DOCTYPE html> 

<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="utf-8" /> 
    <title>Create a new question</title> 
</head> 
<body> 
    <h2>Please create a new question</h2> 
    <form method="post"> 
     <div> 
      <label for="title">Title</label> 
      <input type="text" name="title" /> 
     </div> 
     <div> 
      <label for="question">Question</label> 
      <input type="text" name="question" /> 
     </div> 
     <div> 
      <label for="answer">Answer</label> 
      <input type="text" name="answer" /> 
     </div> 
     <button type="submit">Submit question</button> 
    </form> 
</body> 
</html> 

L'application est tout simplement une application de questions et réponses, j'ai quatre fichiers HTML dans le dossier des modèles Jinja, il est censé prendre le titre de l'entrée de l'utilisateur et le remplacer par l'argument de la fonction, donc si je saisis "python" comme titre, question/python ", c'est ce que j'essaye de faire.

Alors quelqu'un peut-il me dire ce que j'ai manqué?

+1

S'il vous plaît fournir trackback d'erreur complète. –

Répondre

0

Je pensais que ce que vous voulez est redirect():

from flask import Flask, redirect, url_for, render_template 
... 

@app.route('/create', methods =['GET', 'POST']) 
def create(): 
    if request.method == 'POST' 
     ... 
     return redirect(url_for('question', title=title)) # this line 
    ... 

@app.route('/question/<title>', methods = ['GET', 'POST']) 
def question(title): 
    ...