Django学习笔记

来源:互联网 发布:网络大电影有效转化率 编辑:程序博客网 时间:2024/05/16 17:21

 

Django学习笔记

Django Web编程思路
global setting

  • 生成项目project
  • 初始化配置settings.py
  • 生成应用模块app
  • 安装app至project


app setting

  • 编写models.py
  • 定义urls.py
  • 将app urls加入project urls配置
  • 编写views.py
  • 编写相应的template


run server

  • 启动项目,浏览器访问


Check Environment

  • Python2.6
  • Django http:// www.djangoproject.com/download
  • Config PYTHONPATH /etc/environment


Start Project

$django-admin.py startproject mysite


生成项目文件

manage.py 文件基本就是 django-admin.py 的复制,只是加多了检查当前目录 settings.py文件是否存在,不存在就退出.

settings.py: 文件当中就是把 django/conf/global_settings.py 文件当中的信息抽取出来,最终 django.conf.settings 模块会合并当前工程的 settings 和 global_settings 的所有设置,如果有相同的设置名称,会以前工程的 settings 的为准, 需要注意:所有的设置名称的字母都必须全部大写, django 只认大写的设置,不然就视而不见.

urls.py:负责 url 的解析分配的,使用了正则表达式的方式来匹配 url,从而决定应该调用哪个页面显示函数来显示,函数参数是什么等等


URL控制器urls.py

然后我们在修改一下 urls.py 的文件,增加一行 (r'^$', 'views.index'),其中 r'^$'这个正则表达式就是表示匹配一个空字符串,多一个空格都不行,因为一开始^就结束$嘛!

然后后面的'views.index'表示调用 views 模块的 index 函数

说明:

  • 默认地,任何不匹配或尾部没有斜杠(/)的申请URL,将被重定向至尾部包含斜杠的相同字眼的URL。 (这是受配置文件setting中APPEND_SLASH项控制的)
  • Django在检查URL模式前,移除每一个申请的URL开头的斜杠(/)。 这意味着我们为/hello/写URL模式不用包含斜杠(/)。
  • 另外需要注意的是,我们把hello视图函数作为一个对象传递,而不是调用它。 这是 Python (及其它动态语言的) 的一个重要特性: 函数是一级对象(first-class objects), 也就是说你可以像传递其它变量一样传递它们。
  • 另外一个重点,正则表达式字符串的开头字母“r”。 它告诉Python这是个原始字符串,不需要处理里面的反斜杠(转义字符)


视图文件views.py

views.py中定义的视图函数至少有一个参数,且第一个参数必须固定是 django/http/__init__.py 当中定义的 HttpRequest 这个 class 的子类,至于是哪个子类就不一定了。该类函数必须返回一个 HttpResponse 类型的结果。


模板文件template

语法说明:

{{ var }} 输出变量的取模板标签

{% if bool %} 块标签

{{var_date|date,'Fj,Y'}}过滤器(**转换变量输出格式的方式,过滤器是用管道符(|)来调用的**),shipdate通过管道转换哦date类型,后面定义输出格式

一旦你创建一个 Template 对象,你可以用 context 来传递数据给它。 一个context是一系列变量和它们值的集合。调用 Template 对象 的 render() 方法并传递context来填充模板.

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

深度变量的查找:

模板系统能够非常简洁地处理更加复杂的数据结构,例如list、dictionary和自定义的对象。__在 Django 模板中遍历复杂数据结构的关键是句点字符 (.)__。

如果{% include %}标签指定的模板没找到,Django将会在下面两个处理方法中选择一个:

  1. 如果 DEBUG 设置为 True ,你将会在 Django 错误信息页面看到 TemplateDoesNotExist 异常。
  2. 如果 DEBUG 设置为 False ,该标签不会引发错误信息,在标签位置不显示任何东西。 

 

数据模型models.py

用于写针对django 自带的面向对象数据库的数据模型的,数据模型可以通过 syncdb 命令来产生相应的物理数据库表

 

Start Project

$python manage.py runserver  0.0.0.0:8000

访问:http://localhost:8000/

 

Start App

$django-admin.py startapp appname

一个项目可以包涵多个模块,Django把每个模块当作一个app,不同的app模块关注不同的业务,且每个app都有很大程序上的独立性,可以很好的实现代码重用


生成应用文件

  1.  models.py:用于写针对django 自带的面向对象数据库的数据模型的,数据模型可以通过 syncdb 命令来产生相应的物理数据库表
  2. views.py:用于页面显示或者说页面控制的


生成数据表

$python manage.py syncdb

将项目中所有model定义映射到数据表,即ORM:对象关系模型 syncdb 命令是同步你的模型到数据库的一个简单方法。 它会根据 INSTALLED_APPS 里设置的app来检查数据库, 如果表不存在,它就会创建它。 需要注意的是, syncdb 并 不能将模型的修改或删除同步到数据库;如果你修改或删除了一个模型,并想把它提交到数据库,syncdb并不会做出任何处理。

$python manage.py app info

查看要生成的数据表信息

$python manage.py validate

validate 命令检查你的模型的语法和逻辑是否正确。 如果一切正常,你会看到 0 errors found 消息。如果出 错,请检查你输入的模型代码。 错误输出会给出非常有用的错误信息来帮助你修正你的模型。

$python manage.py sqlall app

输出创建一个app下的model数据表的sql信息,并不实际创建数据表 数据表名称:app_model

注意:

  1. 想要应用定义的数据模型自动映射到数据库中,需要在settings.py中 INSTALLED_APPS 安装相应的应用
  2. Django为每个表格自动添加加了一个 id 主键, 你可以重新设置它。
  3. 按约定,Django添加 "_id" 后缀到外键字段名。 你猜对了,这个同样是可以自定义的。
  4. 外键是用 REFERENCES 语句明确定义的


Django 问题解决

1.Django 环境变量设置

PATH = ${django_home}/bin;PYTHONPATH = ${django_project_path}DJANGO_SETTINGS_MODULE = mysite.settings

mysite是project name

 

Django Python Shell

$python manage.py shell

进入有Django配置的shell,可以不设置Django环境变量 在启动解释器之前,它告诉Django使用哪个设置文件。

Django框架的大部分子系统,包括模板系统,都依赖于配置文件;如果Django不知道使用哪个配置文件,这些系统将不能工作。

原理:Django会搜索环境变量DJANGO_SETTINGS_MODULE,它被设置在settings.py中,当运行manage.py中,它会自动加载settings.py


字符编码

t.render(c)返回的值是一个Unicode对象,不是普通的Python字符串。 你可以通过字符串前的u来区分。

在框架中,Django会一直使用Unicode对象而不是普通的字符串。 Template中不允许使用负数列表索引。 像 {{ items.‐1 }} 这样的模板变量将会引发`` TemplateSyntaxError``

句点查找规则可概括为:

  1. 字典类型查找 (比如 foo["bar"] )
  2. 属性查找 (比如 foo.bar )
  3. 方法调用 (比如 foo.bar() ) 仅在方法无需传入参数时,其调用才有效。 否则,系统将会转移到下一个查找类型(列表索引查找)。
  4. 列表类型索引查找 (比如 foo[bar] )
  5. 模板系统不会执行任何以该方式进行标记的方法。 接上面的例子,如果模板文件里包含了{{ account.delete }} ,对象又具有 delete() 方法,而且delete() 有alters_data=True 这个属性,那么在 模板载入时, delete()方法将不会被执行。 它将静静地错误退出。


处理无效变量

默认情况下,如果一个变量不存在,模板系统会把它展示为空字符串,不做任何事情来表示失败。

模板系统不会执行任何以该方式进行标记的方法。

接上面的例子,如果模板文件里包含了{{ account.delete }} ,对象又具有 delete() 方法,而且delete() 有alters_data=True 这个属性,那么在模板载入时, delete()方法将不会被执行。 它将静静地错误退出。

 

Django MVC

Django 紧紧地遵循这种 MVC 模式,可以称得上是一种 MVC 框架。 以下是 Django 中 M、V 和 C 各自的含义:

  • M ,数据存取部分,由django数据库层处理
  • V ,选择显示哪些数据要显示以及怎样显示的部分,由视图和模板处理。
  • C ,根据用户输入委派视图的部分,由 Django 框架根据 URLconf 设置,对给定 URL 调用适当的Python 函数。 由于 C 由框架自行处理,而 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),**Django 也被称为 MTV 框架 。


总结一下

  1. 进来的请求转入/hello/.
  2. Django通过在ROOT_URLCONF配置来决定根URLconf.
  3. Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。
  4. 如果找到匹配,将调用相应的视图函数
  5. 视图函数返回一个HttpResponse
  6. Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来
原创粉丝点击