【django】django深入学习笔记

官网教程 DjangoBook

Models 模型

  • 一个类代表一个模型

  • 类中的属性对应了对应数据表的数据

*makemirgations命令生成数据库脚本(还未同步过数据库,第一次要用到) - > migrate 生成更新对应的数据字段等(数据库内)

模型的取名不要和django.models自带的API重名(增删改查啥的)

Form 表单

 HttpResponse是返回数据给浏览器, 返回的内容可以是字符串,可以是数字,也可以是网页(渲染后的内容, 就是说一大串字符串) 
 
request是浏览器想中心发送的请求,django接收到这个请求之后,可以调用request获取到浏览器提交过来的东西。
【django】django深入学习笔记
1.写model 2.每个model对应写form 3.view中,做表单的数据验证
http://www.douban.com/note/296298497/
 
  • HttpRequest对象还有两个属性包含了用户所提交的信息: request.GET 和 request.POST。二者都是类字典对象,你可以通过它们来访问GET和POST数据。

模板 Template

{{ }} :变量

{% %}:模板标签 //通知模板系统完成某些工作的标签

1. 创建模板对象

2.模板渲染 //传递变量数据给它

*这里使用了RequestContext处理器,也可以用Context处理器实现,或render直接一步实现

**使用Django模板系统的基本规则: 写模板,创建 Template 对象,创建 Context , 调用 render() 方法

**模板中的{{}},在view里写的时候,对应的可以调用key的value属性,也可以是key的方法(名)(只能调用不需参数的方法),也可以是访问列表索引(不允许使用负数列表索引)(字典key:value)

当模板系统在变量名中遇到点时,按照以下顺序尝试进行查找:

  • 字典类型查找 (比如 foo["bar"] )

  • 属性查找 (比如 foo.bar )

  • 方法调用 (比如 foo.bar() )

  • 列表类型索引查找 (比如 foo[bar] )

**{{person.name.upper}}  也可以多层的先找person的属性name,在调用upper方法

3.基本的模板标签和过滤器

标签{% %}: //都可以多层嵌套

  • if/else/endif

*else都是可选的而已

*{% if ____ %} 标签__内接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not )

*{% if %} 标签不允许在同一个标签中同时使用 and 和 or ,因为逻辑上可能模糊的

*一定要用 {% endif %} 关闭每一个 {% if %} 标签

  • for/endfor(循环)

*forloop.counter 就类似计数器一样不过是从0开始的

{% for item in todo_list %}
<p>{{ forloop.counter }}: {{ item }}</p>
{% endfor %}
  • ifequal/ifnotequal

*比较两个参数是否一致。参数可以用单双引号包起来

{% ifequal user currentuser %}
<h1>Welcome!</h1>
{% endifequal %}

**只有模板变量,字符串,整数和小数可以作为 {% ifequal %} 标签的参数

  • 注释

{# #}

要实现多行注释,可以使用`` {% comment %}/{% endcomment %}`` 模板标签

  • 过滤器

模板过滤器是在变量被显示前修改它的值的一个简单方法。 过滤器使用管道字符 //{{ name|lower }} name变量显示到页面上全部都是小写了

*可以有多个|;有些过滤器有参数;

上一篇:集合源码分析[2]-AbstractList 源码分析


下一篇:对付ring0 inline hook