2013-10-21 110 views
0

我在与Flask的项目,我想在用户登录时创建会话。我按照文档,但我的脚本不起作用,并在打开后直接关闭。所以,没有办法在我的浏览器中启动我的项目。会议与烧瓶(python)

我的代码是以下之一:

#! /usr/bin/python 
# -*- coding:utf-8 -*- 

from flask import Flask, url_for, request, session 
import mysql.connector 
app = Flask(__name__) 

@app.route('/connexion/', methods=['GET', 'POST']) 
def connexion(): 
    if request.method == 'POST': 
     if request.form['mail'] == "": 
      return affichage_form_mail(erreur = "001") 
     else: 
      cnx = mysql.connector.connect(user='admin', password='mysql', host='localhost', database='colocation') 
      cursor = cnx.cursor() 
      query = ("SELECT COUNT('email'), password FROM user WHERE email = '" + request.form['mail'] + "'") 
      cursor.execute(query) 
      i = cursor.fetchone() 
      if str(i[0]) != "1": 
       # on regarde le nombre d'enregistrements. Si diff de 0, on réaffiche le formulaire avec un code d'erreur 001 
       return affichage_form_mail(erreur = "001") 
      else: 
       # on vérifie le mdp 
       if request.form['password'] != str(i[1]): 
        # mot de passe faux, on reaffiche form_login avec en argument l'erreur et le mail 
        return affichage_form_mail(request.form['mail'], "002") 
       else: 
        # l'user est connecté. On le redirige vers son compte et on met une variable dans la session 
        session['connect'] = True 
      cursor.close() 
      cnx.close() 
    else: 
     return affichage_form_mail() 

def affichage_form_mail(mail='Adresse email', erreur='none'): 
    aff_erreur = "" 
    if erreur == "001" : 
     aff_erreur = "Email inexistant" 
    if erreur == "002" : 
     aff_erreur = "Mot de passe inccorect" 
    if erreur == "003" : 
     aff_erreur = "Il faut indiquer email" 
    return aff_erreur + '<form action="" method="post"><input type="text" name="mail" value= "' + mail + '" /><input type="text" name="password" /><input type="submit" value="Envoyer" /></form>' 

if __name__ == '__main__': 
app.secret_key = "dd" 
    app.run(debug=True) 

我知道我的秘密密钥是不那么安全的,但它是不是问题的关键。请注意,我尝试了没有秘密密钥(不要问为什么......),我可以在Chrome中打开我的项目,但我当然有一个错误消息,告诉我必须输入密钥。

我希望你能帮助我...我检查了官方文档和我复制粘贴,以确保避免任何错误,但它仍然无法正常工作。

+0

从已打开的命令行运行脚本,以便看到可能发生的任何错误。此外,您发布的代码还远远没有完成。 – ThiefMaster

+0

我用完整的代码编辑了我的问题:) – DescampsAu

+0

现在告诉我们在看到输出的终端中运行文件时得到的错误。 – ThiefMaster

回答

1

您的缩进app.secret_key = "dd"是错误的。它必须与app.run呼叫处于同一水平。

缩进在Python中不可选 - 它是语法的一部分。您必须以一致的方式缩进块,否则脚本将无法运行。

的Python给你非常的方式有用的错误消息 - 所以请您运行在终端代码(CMD.EXE在Windows上,对其他操作系统的任何壳)使用python yourfile.py。这样,当脚本终止时,终端不会关闭,并且您实际上看到错误,而不必在此处询问。


而且你处理SQL真的错了:

query = ("SELECT COUNT('email'), password FROM user WHERE email = '" + request.form['mail'] + "'") 
cursor.execute(query) 

该代码有一个敞开的SQL注入漏洞。改为:

query = "SELECT COUNT('email'), password FROM user WHERE email = %s" 
cursor.execute(query, [request.form['mail']]) 

这样数据库(或数据库API)将以安全的方式处理您的参数。


另一件事:你真的应该使用,而不是创建嵌入HTML的一个丑陋的烂摊子Jinja2的模板。无论如何,这是一个优秀的模板引擎,它已经是Flask的依赖。

+0

好的。通过在Stackoverflow中缩进错误。我道歉。在我的文件中,这很好。 – DescampsAu

+1

哦,我明白了,你混合了制表符和空格。也是你永远不应该做的事情。只能使用4位缩进! – ThiefMaster