2015-04-26 26 views
0

我正在燒瓶(python)中編寫一個簡單的web應用程序,它將要求學生填寫表單中的實驗數據,並將數據提交到服務器上。Flask在python shell中工作的Sqlalchemy模型但不能在web界面中

我的用戶類的樣子:

class User(db.Model): 
    id=db.Column(db.Integer,primary_key=True) 
    email=db.Column(db.String,unique=True) 
    name=db.Column(db.String) 
    password=db.Column(db.String) 
    data = db.relationship('ExpData', backref='student', lazy='dynamic') 

和EXPDATA類,將存儲的數據是這樣的:

class ExpData(db.Model): 
    id=db.Column(db.Integer,primary_key=True) 
    exp_1_data=db.Column(db.String) 
    submission_date=db.Column(db.DateTime) 
    user_id=db.Column(db.Integer, db.ForeignKey('user.id')) 

現在用戶模型完美的作品,whide EXPDATA模型不把任何東西數據庫。我用下面的線來實現它:

u=models.User(email=usern,name=nameu,password=userp,rollno=rollno) 
db.session.add(u) 
db.session.commit() 

然後在需要的功能:

user=g.user 
dat=models.ExpData(exp_1_data='dataStr',submit=1,submission_date=datetime.now(),student=user) 
db.session.add(dat) 
db.session.commit() 

在Python Shell它完美的作品。但由於某種原因,通過網絡界面不起作用。

其他詳情: 用戶通過由瓶-登錄提供了一種login_user()函數 然後用戶被分配通過另一裝飾器g.user登錄

@app.before_request 
    def before_request(): 
    g.user = current_user 

然後數據庫條目完成每當下面的函數在訪問的URL

@app.route('/exp1echo', methods=['GET','POST']) 
@login_required 
def exp1echo(): 
    exp1_data={} 
    exp1_data["ans"]=float(request.args.get("ans")) #getting some data through ajax 'get' call 
    user=g.user 
    filename = user.name+" simplePrint.pdf" # save file with user name in file name 
    pdf=render_template('exp1_post.html',exp1_data=exp1_data) 
    pisa.CreatePDF(pdf.encode("ISO-8859-1"), file(filename, "wb")) 
    pdf.close() # Just fyi this call does return an error 
    #"No handlers could be found for logger "xhtml2pdf"" but all works fine 
    abc={'a':1,'b':2,'c':3} 
    dataStr=str(abc) 
    dat=ExpData(exp_1_data='dataStr',submit=1,submission_date=datetime.now(),student=g.user) 
    db.session.add(dat) 
    db.session.commit() 
    return jsonify({'base_vl':1}) # return some value to ajax call 

用戶加載器被定義爲執行:

lm = LoginManager() 
lm.init_app(app) 


@lm.user_loader 
    def load_user(id): 
    return models.User.query.get(int(id)) 

用戶通過以下網址註冊:

@app.route('/register', methods=['GET','POST']) 
def register(): 
    if request.method == 'POST': 
    user_pass=request.form["password"] 
    user_name=request.form["username"] 
    name_=request.form["name"] 
    u=models.User(email=user_name,name=name_,password=user_pass) 
    db.session.add(u) 
    db.session.commit() 
    return redirect(url_for('login')) 

return render_template('register_form.html') 
+0

沒有圍繞該代碼的一些上下文很難說。這些代碼片段何時執行? 'g.user'什麼時候給出一個值?什麼是「所需功能」? – dirn

+0

爲了簡潔,我做了這個。現在我已經提供了更多細節。請讓我知道我是否會提供更多詳細信息 – ipcamit

+0

您的'@ login_manager.user_loader'實現是什麼樣的? – dirn

回答

0

嗯,這是尷尬!發現了錯誤。出於某種原因,exp1echo()中的pdf.close()函數會提供一個錯誤(如前所述)。該錯誤在調試過程中不顯示任何消息,也不會退出程序。所以我忽略了它。但它會終止該函數的執行。所以它不會發送任何呼叫到數據庫。所以我評論說,瞧!有效。

相關問題