2013-10-21 169 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