我正在使用带有sqlalchemy的python框架烧瓶.
我的多对多看起来像这样:
collections_questions = db.Table('collections_questions',
db.Column('question_id',db.Integer,db.ForeignKey('question.id')),
db.Column('collection_id',db.Integer,db.ForeignKey('collection.id'))
)
class Collection(db.Model):
id = db.Column(db.Integer,primary_key=True)
title = db.Column(db.String)
lang = db.Column(db.Integer)
questions = db.relationship('Question',secondary=collections_questions,backref=db.backref('collections'),lazy='dynamic')
def __init__(self,title,lang=0):
self.title = title
self.lang = lang
class Question(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String)
question = db.Column(db.String)
lang = db.Column(db.Integer)
type = db.Column(db.Integer)
def __init__(self,title,question,lang=0,type=0):
self.title = title
self.question = question
self.lang = lang
self.type = type
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做
collection = db.session.query(Collection).get(1)
Run Code Online (Sandbox Code Playgroud)
collection.questions不返回问题列表,而是返回以下查询.
SELECT question.id AS question_id, question.title AS question_title, question.question AS question_question, question.lang AS question_lang, …Run Code Online (Sandbox Code Playgroud) 我已经使用flask框架配置了python服务器.现在我想从桌面应用程序向服务器发送请求.我的服务器位置是:http://127.0.0.1:5000/
我编写的代码可以在浏览器中运行,但我想从我的桌面应用程序访问该代码.
import flask,flask.views import os import functools
app=flask.Flask(__name__)
app.secret_key="xyz" users={'pravin':'abc'}
class Main(flask.views.MethodView):
def get(self):
return flask.render_template('index.html')
def post(self):
if 'logout' in flask.request.form:
flask.session.pop('username',None)
return flask.redirect(flask.url_for('index'))
required=['username','passwd']
for r in required:
if r not in flask.request.form:
flask.flash("Error: {0} is required.".format(r))
return flask.redirect(flask.url_for('index'))
username=flask.request.form['username']
password=flask.request.form['passwd']
if username in users and users[username]==password:
flask.session['username']=username
else:
flask.flash("Username doesn`t exist or incorrect password.")
return flask.redirect(flask.url_for('index'))
app.add_url_rule("/",view_func=Main.as_view("index"),methods=["GET","POST"])
app.debug=True
app.run()
Run Code Online (Sandbox Code Playgroud) 我有一个带有以下目录结构的烧瓶应用程序:
__init__.py__init__.py模型使用Flask-SQLAlchemy,因此,他们需要访问db对象(SQLAlchemy实例)application.py
user.py:
import sys,os
sys.path.append('/path/to/application/package')
from testapp import db
class User(db.Model):
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(255),unique=True)
age = db.Column(db.Integer)
def __init__(self,username,age):
self.username = username
self.age = age
def __repr__(self):
return '<User %r>' % self.username
Run Code Online (Sandbox Code Playgroud)
因为任何模型都需要访问应用程序的SQLAlchemy实例,该db属性,我必须将整个包放在路径上,然后从主应用程序模块导入.为了理智,我想将模型保存在单独的文件中.我是否需要将路径代码放在每个模型的顶部?有没有更好的办法?我宁愿没有这样的完整路径输入,因为它们可能被部署到具有不同目录结构的不同主机.理想情况下,会有一些内部处理路径的方法,所以当它被用作另一个用户时,mod_wsgi我不必手动更改代码.
我有一个简单的Flask应用运行.服务我使用龙卷风.启动服务器的代码如下所示:
# Run the app in server mode
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(port)
IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)
其中app是Flask WSGI app对象(app = Flask(__name__)).
现在,服务器使用整个JSON答案响应每个请求,是否有(简单)方式返回Gzip数据?在Tornado网站上我找到了http://www.tornadoweb.org/documentation/releases/v2.1.0.html?highlight=gzip,所以必须有Tornado,但Flask解决方案也很棒.
也许有人可以帮助/解释我,如何urls.py在Django中为Flask 创建文件?
main.py - 主项目文件.它仅包括app runner(app.run()).urls.py位于同一目录,需要提供视图views.py.我的代码中的很多模型都有关系,可以是None.很多时候,这需要None在访问数据之前进行检查:
{% if foo.bar %}
{{ foo.bar.baz }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
如果我不添加该检查,则该页面会完全出现UndefinedError.从Flask应用程序运行时,有没有什么方法可以让我在Jinja2中默默地失败UndefinedErrors?
我试图通过date_registered订购用户的感谢(帖子).
目前,有两个查询可以获得两个列表,然后手动组合并重新排序.用户可以是感谢者或接收者.感谢总是一个单独的给予者,但可能有多个接收者.因此我有一个Thank和一个ThankReceivedByUser模型来获得结果.
class Thank(db.Model):
id = db.Column(db.Integer, primary_key = True)
giver_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable = False)
status = db.Column(db.SmallInteger, nullable = False)
date_registered = db.Column(db.DateTime, nullable = False)
class ThankReceivedByUser(db.Model):
id = db.Column(db.Integer, primary_key = True)
thank_id = db.Column(db.Integer, db.ForeignKey("thank.id"), nullable = False)
receiver_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable = False)
status = db.Column(db.SmallInteger, nullable = False)
date_registered = db.Column(db.DateTime, nullable = False)
Run Code Online (Sandbox Code Playgroud)
如果可能的话,在构建单个查询时获得一些提示会很棒.
我想从我的表中删除一个条目.这是我删除功能的代码.
@app.route("/delete_link/<link_id>", methods=['GET', 'POST'])
def delete_link(link_id):
link = models.Link.query.filter(models.Link.l_id == link_id).first()
db.session.delete(link)
db.session.commit()
return flask.redirect(flask.url_for('links'))
Run Code Online (Sandbox Code Playgroud)
这一行:db.session.delete(link)给我这个错误:
InvalidRequestError:对象''已附加到会话'1'(这是'2')
我也尝试过这段代码:
@app.route("/delete_link/<link_id>", methods=['GET', 'POST'])
def delete_link(link_id):
link = models.Link.query.filter(models.Link.l_id == link_id)
link.delete()
db.session.commit()
return flask.redirect(flask.url_for('links'))
Run Code Online (Sandbox Code Playgroud)
它不会更新数据库.链接不能在会话中我猜,但我不知道如何检查,以及如何解决它.我是sqlalchemy的新手.
编辑:
我用它来创建我的db变量,它可能在这个阶段创建会话(这是在代码的顶部).它来自烧瓶文档
from yourapplication import db
Run Code Online (Sandbox Code Playgroud) 我是Flask的新手,正在实施一个小应用程序.我成功地在访问某个网页时显示"Hello World",但即使我更改了代码,也无法将其更改为"Hello World Again".为什么它仍然运行旧代码,如何让它运行新代码?谢谢.
假设我有一个Flask应用程序,由uWSGI使用多个进程提供服务,例如:
uwsgi --socket 127.0.0.1:3031 --file flaskapp.py --callable app --processes 4
Run Code Online (Sandbox Code Playgroud)
我的Flask应用程序组织如下:
/flaskapp
app.py
/db
__init__.py
somefile.py
somefile2.py
...
Run Code Online (Sandbox Code Playgroud)
我正在使用boto连接到DynamoDB.该__init__.py文件为空,每个somefilexxx.py文件都是这样的:
db = boto.connect_dynamodb()
table = db.get_table('table')
def do_stuff_with_table():
Run Code Online (Sandbox Code Playgroud)
我不在应用程序中使用线程,我不认为uWSGI使用线程,除非我明确启用它们--threads.这个设置有意义吗?是否有任何线程问题我不得不担心urllib(你可能会猜我对线程知之甚少)?
或者,它会更有意义调用connect_dynamodb()中__init__.py的文件,并只加载在表somefile.py文件?
flask ×10
python ×10
sqlalchemy ×2
boto ×1
django ×1
gzip ×1
jinja2 ×1
orm ×1
python-2.7 ×1
tornado ×1
url-pattern ×1
uwsgi ×1
wsgi ×1