Flask 蓝图动态 URL 前缀用做数据库前缀如何实现?

2016-08-10 14:01:21 +08:00
 LiuXuFei

根据文章“Flask 蓝图中使用动态 URL 前缀”,我想使用这个 URL 前缀做为数据库表前缀,如何使用?

以下为类比,或者有其他的方式?

# -*- coding: utf-8 -*-
from application import db

class User(db.Model):
    # prefix 为数据库表前缀
    __tablename__ = prefix + 'users'

    id = db.Column(db.Integer, primary_key = True)
    nickname = db.Column(db.String(64), index = True, unique = True)
    email = db.Column(db.String(120), index = True, unique = True)

    def __repr__(self):
        return '<User %r>' % (self.nickname)
3147 次点击
所在节点    Python
9 条回复
gotounix
2016-08-11 11:45:14 +08:00
你这样做完全没有意义啊。数据库表名基本是不变的, Blueprint 做的 URL 可以变更,如果你改了 URL ,你还要手动去改表名,如果有关联表,那就更悲剧了。何必呢?
tumb8r
2016-08-11 13:34:03 +08:00
。。。。有谁会去随意改动数据库表名。。。
LiuXuFei
2016-08-11 14:29:19 +08:00
@gotounix
@tumb8r 可能我没说清楚,这么说吧

有两个子站前缀分别为 aaa 和 bbb

分别有三张表:
aaa_users 、 aaa_posts 、 aaa_comments
bbb_users 、 bbb_posts 、 bbb_comments

后期可能随时会在增加子站,但是数据库还是增加相同(可以手动),只是数据库表前缀用 url 这个前缀变量。
gotounix
2016-08-11 14:42:08 +08:00
新建一个 constant.py ,把表名全部写到这里面,只能加不能改, views 和 models 都 import 这个文件取 prefix 。
LiuXuFei
2016-08-11 14:45:50 +08:00
@gotounix
这样反而麻烦了,我现在根据这篇文章( https://segmentfault.com/a/1190000002480266 )。
目前只是不知道怎么把 g.user_url_slug 变量用到我上面代码的 prefix 中?
gotounix
2016-08-11 14:55:32 +08:00
@LiuXuFei 这样麻烦?这样可以非常有效的避免重复。
LiuXuFei
2016-08-11 15:01:10 +08:00
@gotounix 我不知道我的这种方式能不能做到。如果可以也不会重复啊。还不需要记录表名。
gotounix
2016-08-11 15:25:54 +08:00
@LiuXuFei g 是当前请求的全局变量,不同的请求对应不同的全局变量,不同的用户的 user_url_slug 是不一样的。
你去看看 blueprint 的应用和 flask 的上下文吧。
LiuXuFei
2016-08-11 16:31:42 +08:00
@gotounix 哦,谢谢提示,然怪了,那有没有其他的方式获取不同子站,不同变量前缀的?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/298370

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX