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')
沒有圍繞該代碼的一些上下文很難說。這些代碼片段何時執行? 'g.user'什麼時候給出一個值?什麼是「所需功能」? – dirn
爲了簡潔,我做了這個。現在我已經提供了更多細節。請讓我知道我是否會提供更多詳細信息 – ipcamit
您的'@ login_manager.user_loader'實現是什麼樣的? – dirn