大家写 Django 用 class-based view 吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
cbsw

大家写 Django 用 cass-based view 吗?

  •  
  •   cbsw
    dengshuan Mar 21, 2014 4887 views
    This topic created in 4422 days ago, the information mentioned may be changed or developed.
    之前为了早日实现功能,匆匆用function views完成了,后来看文档发现有个class-based views(Tutorial里提到过的早忘了),用起来很方便。刚入手不太明白怎么写class-based view,去看 https://github.com/python/pythondotorg 发现全是用的class-based view。所以想问下大家是全用class-based view还是混合着用,我有没有必要将function views都改成class-based views呢
    14 replies    1970-01-01 08:00:00 +08:00
    est
        1
    est  
       Mar 21, 2014
    如果以同一个URL有这种结构:

    def myview(request):
      my object = ..
      if request.method=='GET':
        xxx
      elif request.method=='POST':
        yyy

    那么可以考虑使用class based view
    cbsw
        2
    cbsw  
    OP
       Mar 21, 2014
    @est 有些函数是这样的。做一个类似V2EX的网站,node下面显示topics,这个可以用ListView,怎么把每个topic的回复数显示在topic下面呢,get_context_data的数据好像没法和model同时遍历
    RIcter
        3
    RIcter  
       Mar 21, 2014
    @cbsw 如果是分表的话应该是主题对回复是一对多。查询的话架设某主题id是1好了然后

    Reply.objects.count(topic__id=1)应该就是回复数了
    gaicitadie
        4
    gaicitadie  
       Mar 21, 2014
    感觉没必要,网站的结构不是按Class走的,也不是按restful走的。各种需求会把结构打的七零八落
    paomian
        5
    paomian  
       Mar 21, 2014
    yueyoum
        6
    yueyoum  
       Mar 21, 2014
    LZ 肯定没写过 reusable app
    cbsw
        7
    cbsw  
    OP
       Mar 21, 2014
    @RIcter 这样用是错的,应该是 Reply.objects.filter(topic__id=1).count()。 查询我知道,用了ListView后在template里不是用object_list遍历topic吗,如何将回复数在遍历的同时添加到topic下面?
    @yueyoum 你猜对了,还没写过大型项目呢,面向对象的技术也没学过,所以写程序时出发点都是面向过程的
    RIcter
        8
    RIcter  
       Mar 21, 2014
    @cbsw 我记错了那就Σ(Д)
    你可以通过topic取reply啊。。
    cbsw
        9
    cbsw  
    OP
       Mar 21, 2014
    @RIcter 可以直接在template中用 topic.reply_set.count 获得回复数
    cbsw
        10
    cbsw  
    OP
       Mar 21, 2014
    果然用class-based view省去了好多代码
    geeklian
        11
    geeklian  
       Mar 21, 2014 via iPad
    我是全部用的class base。

    优点显而易见啊。

    配置一个BaseView

    然后处理通用的GET请求,譬如?page=xxx之流,全都放入def dispatch下。
    lzjun
        12
    lzjun  
       Mar 21, 2014
    好,我也决定改造一下
    raquelken
       13
    raquelken  
       Mar 21, 2014
    @cbsw
    node下面有100个topic不是要多100条select?
    要善用extra
    Topic.objects.extra(
    select={
    'reply_amount': """SELECT COUNT(*) FROM reply
    WHERE reply.id = topic.id """,
    },
    ).filter()
    cbsw
        14
    cbsw  
    OP
       Mar 21, 2014
    @raquelken 不错,学习了。不过用django的话,一般都尽量避免使用 raw sql queries 吧,另外这个跟我那个方法差别不大吧,model在ListView里已经设置好了,在template里遍历Topic时,顺带用topic.reply_set.count就将回复数取出来了,每条topic的reply_count也就查询一次啊
    About     Help     Advertise     Blog     API     FAQ     Solana     3233 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 59ms UTC 13:21 PVG 21:21 LAX 06:21 JFK 09:21
    Do have faith in what you're doing.
    ubao msn 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