请教一个问题,关于用 GAE 挂起用户的实现。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DAOCLOUD
推荐学习书目
Python Cookbook
Using Google App Engine
推荐下载
Latest Google App Engine SDK
其他兼容技术
AppScale
darasion
V2EX    Google App Engine

请教一个问题,关于用 GAE 挂起用户的实现。

  •  
  •   darasion 2010-09-09 19:19:19 +08:00 3963 次点击
    这是一个创建于 5514 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我的需求大概是这样,
    发现某个用户有滥用行为,管理员将该用户挂起,再不删除实际数据的情况下,在前台显示中过滤掉被挂起用户所产生的内容。

    1、通常情况下“用户”,与用户产生的“内容”的关系为:
    (注意这里所说的“用户”不是Google Account或者其他GAE内置支持的用户类型。)

    class User(db.Model):
    name = db.StringProperty()

    class Story(db.Model):
    title = db.StringProperty()
    cOntent= db.StringProperty()
    author = db.ReferenceProperty(User)

    查询一个Story列表:
    stories = Story.all().fetch(10)


    2、加入封杀功能,自然的想到大概应该是这样做:

    class User(db.Model):
    name = db.StringProperty()
    suspended = db.BooleanProperty(default=False)

    class Story(db.Model):
    title = db.StringProperty()
    cOntent= db.StringProperty()
    author = db.ReferenceProperty(User)


    查询一个Story列表:
    stories = Story.all().filter("author.suspended =", False).fetch(10)
    但是这个办法是错误的。什么都查不到。

    Datastore是没有join操作的,所以不能在一个model的filter里限制另一个model的值。


    3、目前我的比较笨的解决办法是这样:

    我把Story也加一个suspended属性,挂起一个用户的同时将所所有该用户产生的内容一同挂起。
    也就是:
    def suspend_user(user):
    user.suspended=True
    user.put()
    stories=user.story_set.all().fetch(100)
    for story in stories:
    story.suspended=True
    db.put(stories)

    这样做是考虑到挂起一个用户并不是非常频繁的操作,而查询用户产生的内容的操作经常会被用到。
    但是这样一用才发现索引数量增加了差不多一倍啊。


    4、有人说用IN来查询,但是文档中说这个最多不过30个,要是有人故意捣乱30个就太少了。并且带有IN的查询好像不能太频繁的用吧?

    ----------------
    这个问题我在别的地方问过,总感觉一些解决办法不太好用。不知道有什么其他简洁高效办法么?
    ----------------
    4 条回复    1970-01-01 08:00:00 +08:00
    summic
        1
    summic  
       2010-09-09 19:45:50 +08:00
    那么在story里面加一个字段标记一下呢?挂起的时候,更新他所有的story的这个字段
    darasion
        2
    darasion  
    OP
       2010-09-09 20:24:47 +08:00
    @summic 你没仔细看。
    Livid
        3
    Livid  
    MOD
    PRO
       2010-09-09 21:07:53 +08:00 via iPhone
    可以在浏览器端用 JS 把内容藏起来,V2EX 的 block 就是这样实现的。
    darasion
        4
    darasion  
    OP
       2010-09-09 21:25:35 +08:00
    @Livid 内容虽然用 js 隐藏了,但是一旦页面代码一旦出现敏感词还是会被重置的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5357 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 08:28 PVG 16:28 LAX 01:28 JFK 04:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86