小编Cho*_*key的帖子

Flask/SQLAlchemy - 多对多关系的关联模型和关联表之间的区别?

我开始从Flask Mega Tutorial中学习这些东西.当他进入多对多关系时,他会创建一个如下关联表:

followers = db.Table('followers',
    db.Column('follower_id', db.Integer, db.ForeignKey('user.id')),
    db.Column('followed_id', db.Integer, db.ForeignKey('user.id'))
)
Run Code Online (Sandbox Code Playgroud)

当我在寻找添加一些关于模型之间特定关联的元数据的方法时,我发现你可以在关联表中存储这种东西.但是我发现的这个例子似乎使得关联表成为一个真实的模型.

class DepartmentEmployeeLink(Base):
    __tablename__ = 'department_employee_link'
    department_id = Column(Integer, ForeignKey('department.id'), primary_key=True)
    employee_id = Column(Integer, ForeignKey('employee.id'), primary_key=True)
    extra_data = Column(String(256))
    department = relationship(Department, backref=backref("employee_assoc"))
    employee = relationship(Employee, backref=backref("department_assoc"))
Run Code Online (Sandbox Code Playgroud)

这两种方法有什么区别?将元数据存储在关联表中是否需要模型方法,或者使用top方法可以完成同样的事情?

谢谢!

many-to-many sqlalchemy model-associations flask flask-sqlalchemy

17
推荐指数
1
解决办法
5474
查看次数

sudo pip install VS pip install --user

不记得我在哪里读到这个,但无论是在这里的某个地方,还是在我关注的教程的评论中,一个人说:

'永远不要使用sudo pip install; 你可以在不知情的情况下覆盖重要的东西.使用pip install --user代替!'

虽然我看到很多关于sudo pip安装的引用,所以这个人知道他们在谈论什么,我应该避免它,或者......?

python sudo pip

15
推荐指数
2
解决办法
1万
查看次数

将Flask应用程序部署为Windows服务

我正在使用此处找到的模板:是否可以在Windows中将Python脚本作为服务运行?如果可能,怎么样?

这是我的run.py,我按照上面链接中的说明安装了服务.

from app import app

import win32serviceutil
import win32service
import win32event
import servicemanager
import socket


class AppServerSvc (win32serviceutil.ServiceFramework):
    _svc_name_ = "Flask App"
    _svc_display_name_ = "Flask App"

    def __init__(self,args):
        win32serviceutil.ServiceFramework.__init__(self,args)
        self.hWaitStop = win32event.CreateEvent(None,0,0,None)
        socket.setdefaulttimeout(60)

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)

    def SvcDoRun(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                              servicemanager.PYS_SERVICE_STARTED,
                              (self._svc_name_,''))
        self.main()

    def main(self):
        app.run(host = '192.168.1.6')

if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(AppServerSvc)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试启动服务时,我收到消息:

"本地计算机上的Flask App服务已启动然后停止.如果某些服务未被其他服务或程序使用,则会自动停止."

知道我做错了什么吗?我尝试了各种用户帐户 - 我不认为这是一个权限问题.

谢谢!

python windows service flask

11
推荐指数
1
解决办法
1万
查看次数

SQLAlchemy - 有没有办法查看当前会话中的内容?

我很好奇是否有办法显示当前会话中的内容?

或者也许是一种检查会话是否为空的方法,以便我可以执行类似下面的操作.

if db.session:
    db.session.commit()
Run Code Online (Sandbox Code Playgroud)

这样,只有在会话中的某些内容等待提交时才会提交.

python session sqlalchemy flask

9
推荐指数
1
解决办法
5240
查看次数

使用Flask-Security的每位用户的唯一盐

在这里阅读了一些关于盐渍密码的信息后,似乎最好为每个用户使用一种独特的盐.我正在努力实现Flask-Security atm,从文档看来你只能设置一个全局盐:即SECURITY_PASSWORD_SALT ='thesalt'

问题:如何为每个密码制作一个独特的盐?

谢谢!

编辑:从Flask-Security上的文档中我发现了这一点,这似乎再次暗示这个模块只对开箱即用的所有密码使用一个盐.

flask_security.utils.get_hmac(password)
    Returns a Base64 encoded HMAC+SHA512 of the password signed with the salt 
    specified by SECURITY_PASSWORD_SALT.
Run Code Online (Sandbox Code Playgroud)

python encryption salt flask flask-security

7
推荐指数
2
解决办法
3317
查看次数

SQLAlchemy和MySQL中一对多关系中列的唯一约束

我不确定我是否正确地提出了这个问题.我可以为我的任何表添加一个独特的约束,但在下面的情况下,我不知道如何做我想要的事情:

class Branch(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(160))
    #foreign key for 'branches' in Account class. access with Branch.account
    account_id = db.Column(db.Integer, db.ForeignKey('account.id'))

class Account(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(160), unique=True)
    branches = db.relationship('Branch', backref = 'account', lazy = 'dynamic')
Run Code Online (Sandbox Code Playgroud)

因此,当我向Branch表的name列添加唯一约束时,我无法将同名分支添加到不同的帐户.例如,西雅图可能是AccountA和AccountB的分支.

我想要做的是应用仅在account.id相同时检查唯一性的约束.这可能吗?

mysql sqlalchemy one-to-many flask alembic

6
推荐指数
1
解决办法
5672
查看次数

如何在validate_on_submit()块之后填充WTForms FieldList?

关于如何使用WTForms的FieldList,确实缺乏文档.所以,多亏了互联网,我已经能够将以下内容整合在一起:

形成:

class BranchForm(Form):
    name = StringField('Name', validators = [Required()])
    equipment = FieldList(SelectField('Equipment', validators=[Required()], coerce=int,
        choices = [(x.id, x.name) for x in Equipment.query.all()]))
    mod = FieldList(StringField('Method of Delivery', validators = [Optional()]))
Run Code Online (Sandbox Code Playgroud)

视图:

def edit_branch(id):
    branch = Branch.query.filter_by(id=id).first()

    #populate data_in to be used by BranchForm
    data_in = []
    for eq_obj in branch.equipment_assoc:
        data_in.append(('equipment', eq_obj.equipment.id))
        data_in.append(('mod', eq_obj.mod))

    editform = BranchForm(data=MultiDict(data_in))

    if editform.validate_on_submit():
        branch.name = editform.name.data

        db.session.add(branch)
        db.session.commit()

        return redirect('/admin/branches/' + str(branch.id))

    editform.name.data = branch.name

    return render_template("branch_edit.html",
        title="Edit Branch",
        branch = branch,
        editform …
Run Code Online (Sandbox Code Playgroud)

forms fieldlist flask wtforms

6
推荐指数
1
解决办法
2233
查看次数

Docker - 多个重复的卷声明;发生什么了?

我正在尝试为我的 MySQL docker 容器设置持久数据卷。

我正在使用在 Dockerfile 中有这个的官方 MySQL 镜像:

卷/var/lib/mysql

如果我调用

-v /var/lib/mysql:/var/lib/mysql

在运行时,我的命令优先,还是必须从 Dockerfile 中删除 VOLUME 声明?

mysql volume docker dockerfile

6
推荐指数
1
解决办法
5100
查看次数

Python - 在 SQLAlchemy 模型中定义最大字符串长度的目的是什么?

只是好奇,因为它似乎并没有像我预期的那样阻止更长的字符串存储在数据库中。

如果无关紧要,为什么还要定义它呢?(它必须做点什么!)

class Message(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    tag = db.Column(db.String(12))
    description = db.Column(db.String(120))
    copy = db.Column(db.String)
    voice = db.Column(db.String(24))
Run Code Online (Sandbox Code Playgroud)

python sqlite sqlalchemy

5
推荐指数
0
解决办法
3011
查看次数

在HTML中使用libphonenumber和JavaScript

libphonenumber是一个非常令人困惑的工具,无法考虑在网络上找到的大量实现和示例,因此请耐心等待。

我很想尝试通过HTML文件中的脚本标签使用此包,就像我已经使用过其他所有JavaScript库(如jQuery)一样。

我已按照此处的说明使用Google的撰写工具来编译libphonenumber

因此,对于这个单一文件,我尝试如下使用。但是,无论我尝试了什么,我似乎都无法访问其中的任何方法。

<script type="text/javascript" language="javascript" src="/static/js/libphonenumber.js"></script>
<script type="text/javascript">

    $(".phone-format").keyup(function () {
        // Don't reformat backspace/delete so correcting mistakes is easier
        if (event.keyCode != 46 && event.keyCode != 8) {
            var val_old = $(this).val();
            var newString = new libphonenumber.i18n.phonenumbers.AsYouTypeFormatter('US').input(val_old);
            $(this).focus().val('').val(newString);
        }
    });

</script>
Run Code Online (Sandbox Code Playgroud)

完全不支持此使用情况吗?

html javascript libphonenumber

5
推荐指数
1
解决办法
1554
查看次数