V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
clker
V2EX  ›  Python

请教大家一个django注册的诡异问题。

  •  
  •   clker ·
    clker · 2013-10-12 19:44:30 +08:00 · 3235 次点击
    这是一个创建于 4061 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 Sina App Engine 节点发了贴 http://www.v2ex.com/t/85265 ,无奈那里人气不足,只能在这里再发一次. 请教各位大大了。
    17 条回复    1970-01-01 08:00:00 +08:00
    jokaye
        1
    jokaye  
       2013-10-12 20:05:46 +08:00
    先用django form重构一下吧, 大部分逻辑都帮你弄好了,一个劲的 XXX = request.POST.XXX 真揪心
    clker
        2
    clker  
    OP
       2013-10-12 20:11:23 +08:00
    @jokaye 谢谢建议,不过不太喜欢 django form, 而且前端用的bootstrap,form也不好用。
    jokaye
        3
    jokaye  
       2013-10-12 20:37:40 +08:00
    @clker 那就用AJAX啊...AJAX里调用form validation, 这个跟用什么前端框架没关系
    hepochen
        4
    hepochen  
       2013-10-12 20:45:27 +08:00
    建议1,不要堆积垃圾代码
    username = request.POST.get('username', '').strip()
    这行代码能代替你原来的5行代码,如果你需要取的变量很多,那么,这样的代码也会成为垃圾代码,需要自己另写一个常用的以应对

    建议2,有意义比简短更重要
    pwd_blank 不如 pwd_is_blank, pwd_is_blank = 1 不如 pwd_is_blank = True

    建议3, 既然用了Django,就应该了解它最基础的逻辑
    我如果记得没错的话,User.objects.filter(username = username)这样返回的一个QuerySet对象,如果用if去判断,那么永远都相当于 True,应该是User.objects.filter(username = username).count(), 是这样么?

    建议4, 不要妄下判断,以目前的水平,多数的问题是出在自己的身上
    “先if 和 else 均被执行,而且还是先执行else” --> 这样的结论如果成立,你可以给python的核心库打补丁了。

    建议5, 不要说本地没问题,不要把问题强加给不相关的方面
    呃,你看下自己的数据库,里面的数据可能跟自己想的也不一样。归根结底是表面的逻辑出问题了。对,这个跟SAE也无关。

    建议6,还没有学会如何DEBUG吧?
    xiaket
        5
    xiaket  
       2013-10-12 21:00:24 +08:00
    @hepochen


    建议3, 既然用了Django,就应该了解它最基础的逻辑
    我如果记得没错的话,User.objects.filter(username = username)这样返回的一个QuerySet对象,如果用if去判断,那么永远都相当于 True,应该是User.objects.filter(username = username).count(), 是这样么?

    如果查询结果为空, 是可以为False的.
    hepochen
        6
    hepochen  
       2013-10-12 21:04:05 +08:00
    @xiaket 嗯,如果这样的话,那是我的错。 :) @clker 那你应该看一下自己的数据库中,是否数据都进去了,另外,在程序执行的时候,打上断点,就清楚其执行逻辑了。
    clker
        7
    clker  
    OP
       2013-10-12 21:04:42 +08:00
    @hepochen 非常感谢这么详细的建议。

    关于建议1, 非常感谢!还没有用过strip,掩面。。。。

    关于建议2, 非常感谢!这方面确实欠缺。

    关于建议3, 我知道filter是返回一个QuerySet,不过一个空的QuerySet会被判为False的。当然大大的建议更好。

    关于建议4,确实没有怀疑过SAE或者CPython,所以请大大们帮忙看下代码有什么漏洞。

    关于建议5,本地确实是没有问题。另外,数据库的数据确实看了,确实注册成功了,图片也存进去了。就是返回说这个用户名已经注册,但确实是刚刚注册的那个。

    关于建议6, 确实debug不是很会。只会看debug页面和log两招。在SAE上面log也确实看到了两个case均被执行。刚刚在google上面搜索了一下,发现django-pdb,去试试。谢谢大大的提醒。
    cj1324
        8
    cj1324  
       2013-10-12 21:07:33 +08:00
    @clker

    前端用的bootstrap,form也不好用。 这句话不成立。好好了解form吧。
    clker
        9
    clker  
    OP
       2013-10-12 21:08:23 +08:00
    @hepochen 发现django-pdb只能在本地环境中使用。请问大大是用什么方法加断点的啊?
    clker
        10
    clker  
    OP
       2013-10-12 21:38:26 +08:00
    @cj1324 恩,看到了 django-bootstrap-form。可以试试。
    jokaye
        11
    jokaye  
       2013-10-12 21:42:32 +08:00
    @xiaket exists()
    clker
        12
    clker  
    OP
       2013-10-12 21:53:36 +08:00
    @jokaye 恩,exist() 的效率应该高一些。
    clker
        13
    clker  
    OP
       2013-10-12 21:55:21 +08:00
    @jokaye @hepochen @cj1324 话说没有人帮我测试一下吗?

    如果不上传头像的话就不会出错,上传的话就就会出错。 http://luezhi.sinaapp.com
    clker
        14
    clker  
    OP
       2013-10-12 22:27:50 +08:00
    太诡异了,有时候没有错,有时候出错。
    hepochen
        15
    hepochen  
       2013-10-13 01:59:58 +08:00
    @clker 推荐使用pycharm作为开发工具。剩下的就靠自己吧,可能会艰难一点,但自通了,进步就是极快的。
    booksmith
        16
    booksmith  
       2013-10-13 08:49:25 +08:00
    楼主明显没有去了解django的基础,form设计是一个很不错的选择,至少比你手动这样敲代码来得高效多了。
    ericls
        17
    ericls  
       2013-10-13 09:00:39 +08:00 via Android
    不能用filter 要用get
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5620 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 08:49 · PVG 16:49 · LAX 00:49 · JFK 03:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.