Django 学习笔记
Table of Contents
1 django学习点滴
- 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'
- 模版中句点的功能 模版中局点可以作为字典查找、属性查找、方法调用、列表类型索引查找。如:{{ foo.bar }}其调用顺序一次为:
- 字典查找 foo['bar']
- 属性查找 foo.bar
- 方法调用 foo.bar()
- 列表类型索引 foo[bar]
系统使用第一个有效类型。这是一种短路逻辑
- 模版中方法调用中使用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 .'
- 模版中避免关键函数的误操作 假设类BankAccount中有delete函数,那么如果模版中有{{ account.delete }}这样的标签,其中 account又是BankAccount的一个实例,模版载入时,account实例将被删除。 要防止这样的事情发送,必须设置该方法的alters_data函数属性_
def delete(self): # Delete the account delete.alters_data = True
使用alters_data后,再次遇到account_.delete标签,delete()方法将不会被执行。
- TEMPLATE_DIRS避免使用绝对路径_
import os.path TEMPLATE_DIRS = ( os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'), )
- Python3中用Django, __unicode___应改为___str___
- 当修改models中的表结构时,不能syncdb 这是只有通过删除数据库,再次syncdb 或者手动连接数据库,用sql修改 在做开发时,测试数据最好用sql保存起来,避免删除数据库后麻烦
- post表单csrf保护 解决:
- html页面的form标签后加入{% csrf_token_ %}如:
<form action="" method="post">{% csrf_token %}
- 在对应的视图函数中,替换Context为RequestContext。如:
from django.template import RequestContext render_to_response('contact_form.html', {'form': form}, context_instance=RequestContext(request))
- html页面的form标签后加入{% csrf_token_ %}如:
- pluralize filter form.errors|pluralize 这块,查文档如下: pluralize 使用形式:{{value | pluralize}},或者{{value | pluralize:"es"}},或者{{value | pluralize:"y,ies"}} 意义:如果value不是1,则返回一个复数后缀,缺省的后缀是's',
- 向模版中传值,捕获和字典,是否可以混合使用 可以,用*args, **kwds调试最清楚 当捕获用(?P<name>\s+)时,捕获参数放在kwds中的,否则是放在args中的;而url中添加的字典都是放在kwds中的。 参数的存放位置,在函数中应该是先捕获参数,然后字典参数,因为args都是放在前面。
- 高级视图和URL配置总结 在这章中讲了几个问题,
- 视图的编写方法,主要有两种,
- 一种是视图函数import后直接写在url当中;
- 另一种是视图函数以str的形式表现出来。
- 捕获值传入视图函数,捕获值可以重命名
- url中可以字典传值,视图编程规范中尽量不使用业务逻辑
- 子视图及子视图的传值
- 视图的编写方法,主要有两种,
- TEMPLATE_CONTEXT__PROCESSORS在工程settings_.py设置方法 为了保留django默认的变量设置,使用下面的配置方法:
from django.conf import global_settings TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( "myapp.processor.foos", )