django book学习笔记

Django 学习笔记

Table of Contents

  • 1 django学习点滴

1 django学习点滴

  1. python ./manage.py shell和python -i的区别 通过manage.py会读取环境变量DJANGO_SETTINGS__MODULE_='djbook.settings'(djbook是工程名) 加载settings中的模块
    import os
    os.environ.get('DJANGO_SETTINGS_MODULE')
    'djbook.settings'     
    
  2. 模版中句点的功能 模版中局点可以作为字典查找、属性查找、方法调用、列表类型索引查找。如:{{ foo.bar }}其调用顺序一次为:
    1. 字典查找 foo['bar']
    2. 属性查找 foo.bar
    3. 方法调用 foo.bar()
    4. 列表类型索引 foo[bar]

    系统使用第一个有效类型。这是一种短路逻辑

  3. 模版中方法调用中使用silent_variable__failure避免异常_ 当异常类中此属性为True时,可以避免异常抛出,如下:
    >>> t = Template("My name is {{ person.first_name }}.")
    >>> class PersonClass3:
    ...     def first_name(self):
    ...         raise AssertionError, "foo"
    >>> p = PersonClass3()
    >>> t.render(Context({"person": p}))
    Traceback (most recent call last):
    ...
    AssertionError: foo
    
    >>> class SilentAssertionError(AssertionError):
    ...     silent_variable_failure = True
    >>> class PersonClass4:
    ...     def first_name(self):
    ...         raise SilentAssertionError
    >>> p = PersonClass4()
    >>> t.render(Context({"person": p}))
    u'My name is .'     
    
  4. 模版中避免关键函数的误操作 假设类BankAccount中有delete函数,那么如果模版中有{{ account.delete }}这样的标签,其中 account又是BankAccount的一个实例,模版载入时,account实例将被删除。 要防止这样的事情发送,必须设置该方法的alters_data函数属性_
    def delete(self):
        # Delete the account
    delete.alters_data = True     
    

    使用alters_data后,再次遇到account_.delete标签,delete()方法将不会被执行。

  5. TEMPLATE_DIRS避免使用绝对路径_
    import os.path
    
    TEMPLATE_DIRS = (
        os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
    )     
    
  6. Python3中用Django, __unicode___应改为___str___
  7. 当修改models中的表结构时,不能syncdb 这是只有通过删除数据库,再次syncdb 或者手动连接数据库,用sql修改 在做开发时,测试数据最好用sql保存起来,避免删除数据库后麻烦
  8. post表单csrf保护 解决:
    1. html页面的form标签后加入{% csrf_token_ %}如:
      {% csrf_token %}
    2. 在对应的视图函数中,替换Context为RequestContext。如:
      from django.template import RequestContext
      render_to_response('contact_form.html', {'form': form}, context_instance=RequestContext(request))
      
  9. pluralize filter form.errors|pluralize 这块,查文档如下: pluralize 使用形式:{{value | pluralize}},或者{{value | pluralize:"es"}},或者{{value | pluralize:"y,ies"}} 意义:如果value不是1,则返回一个复数后缀,缺省的后缀是's',
  10. 向模版中传值,捕获和字典,是否可以混合使用 可以,用*args, **kwds调试最清楚 当捕获用(?P\s+)时,捕获参数放在kwds中的,否则是放在args中的;而url中添加的字典都是放在kwds中的。 参数的存放位置,在函数中应该是先捕获参数,然后字典参数,因为args都是放在前面。
  11. 高级视图和URL配置总结 在这章中讲了几个问题,
    • 视图的编写方法,主要有两种,
      • 一种是视图函数import后直接写在url当中;
      • 另一种是视图函数以str的形式表现出来。
    • 捕获值传入视图函数,捕获值可以重命名
    • url中可以字典传值,视图编程规范中尽量不使用业务逻辑
    • 子视图及子视图的传值
  12. TEMPLATE_CONTEXT__PROCESSORS在工程settings_.py设置方法 为了保留django默认的变量设置,使用下面的配置方法:
    from django.conf import global_settings
    TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
        "myapp.processor.foos",
    )      
    

Date: 2013-08-11 19:26:31 中国标准时间

Author:

Org version 7.8.11 with Emacs version 24

Validate XHTML 1.0

你可能感兴趣的:(python)